我正在为 Xamarin Forms 开设一门 MVVM 类(class),一个类(class)的老师使用 FreshIOC.Container.Register 来“注册不同的实例或依赖项”,我不明白这对我的代码有何影响,如果有人能解释一下我会很感激的。
我的代码为例:
public App()
{
InitializeComponent();
FreshIOC.Container.Register<IContactService,ContactService>();
FreshIOC.Container.Register<IUserDialogs>(UserDialogs.Instance);
}
class MainViewModel : FreshBasePageModel
{
private IContactService service;
private IUserDialogs dialog;
public MainViewModel(IContactService Service, IUserDialogs Dialog)
{
service = Service;
dialog = Dialog;
}
public override async void Init(object initData)
{
dialog.ShowLoading();
var tempt = await service.GetData();
Contacts = tempt;
dialog.HideLoading();
}
}
我看不到 FreshIOC.Container.Register 做了什么,或者它如何连接到 MainViewModel 类。顺便说一句,还有另一种方法称为“解决”而不是“注册”,如果您也能解释一下,我将不胜感激。
就是这样,如果您需要我的代码中的更多内容,我会在看到您的请求后立即提供,非常感谢大家的宝贵时间,祝您有美好的一天。
最佳答案
Register
在 IoC 框架中注册您的具体类。
因此,简而言之,IoC 将像这样工作:
而不是制作new ContactService
一直以来,你都会要求 IoC 框架给你一个。
这有一些好处;
what does Register do?
它确保您可以从 IoC 框架请求此服务。
第一个注册
ContactService
作为 IContactService
;所以,如果您请求 IContactService
你会得到注册的类型。第二个注册一个类型的实例:如果你请求它,你总是会得到那个实例。适用于设置和线程安全的东西。根本不适用于与数据库相关的事物。
What does Resolve do?
它使您能够从 IoC 框架中检索服务,但请注意:可能有更好的方法,例如通过构造函数注入(inject)。
此代码是构造函数注入(inject)的示例:通过注册
IContactService
您已启用自动解析服务的可能性。如果您忽略注册,这是不可能的:public MainViewModel(IContactService Service, IUserDialogs Dialog)
{
service = Service;
dialog = Dialog;
}
如果你没有使用 IoC 框架,你最终会得到
new ContactService
在您使用的每个模型中,可以将其视为此类服务的反模式,因为;关于c# - "FreshIOC.Container.Register"有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59591097/