关于国际奥委会,我读了下面的定义&注册interface,这是我无法理解的。
我们不需要包含我们自己的IOC容器,FreshMvvm附带了内置的IOC容器。它在下面使用TinyIOC,但是使用不同的命名来避免冲突。
接口注册与FreshIOC,如果您看到这段代码,在启动应用程序使此实现
public App()
{
InitializeComponent();
//Interface rgistration with FreshIOC
FreshIOC.Container.Register<IContactRepository, ContactRepository>();
FreshIOC.Container.Register<IValidator, ContactValidator>();
//var mainPage = FreshPageModelResolver.ResolvePageModel<AddContactPageModel>();
//MainPage = new FreshNavigationContainer(mainPage);
} 为什么我们需要注册接口,如果没有注册,它的实际实现是什么?执行这一原则有什么好处吗?下面是这的文章。
发布于 2018-10-19 03:35:24
如果您在DependencySerices中使用过Xamarin.Forms,那么您已经使用了其中的大部分。从Xamarin.Forms的角度进行解释
假设您的ContentPage需要一个Network类来检查是否存在网络连接,传统的方法是使用new关键字并获取实例,这样您就可以调用它的方法。
public MyContentPage : ContentPage
{
private Network network;
public MyContentPage()
{
//..
network = new Network();
}
}
public Network()
{
public bool HasConnectivity() { ... }
}这没有什么问题,但是如果Network类需要一个Log类呢?MyContentPage还需要Log类和Dialog类吗?这需要在你的其他50页中完成??依赖注入解决了这些问题以及更多的问题!
创建接口及其实现,然后将它们注册到容器中。然后容器为您解析所有依赖项!
public MyContentPage : ContentPage
{
private INetwork _network;
private IDialog _dialog;
public MyContentPage(INetwork network, IDialog dialog)
{
//..
_network = network;
_dialog = dialog;
}
}
public Network(ILog log)
{
public bool HasConnectivity() { ... }
}如果您已经注册了所有依赖项,Container将负责处理依赖关系图并为您解析它们。如果容器无法解析图形,可能是因为您没有注册或可能是循环依赖关系,它将抛出异常。
这在一开始似乎是完全没有必要的,但是随着应用程序的发展,MVVM加上DI可以更强大,更容易开发。
我所解释的只是DI的一小部分,您可以在这个伟大的马丁·福勒邮报中了解更多关于伟大的马丁·福勒邮报和DI的内容。
发布于 2018-09-27 08:25:41
https://stackoverflow.com/questions/52531402
复制相似问题