【发布时间】:2016-10-14 22:14:49
【问题描述】:
你能帮我解释一些模式的理论吗?我试图描述它们,我已经尽力了,但我认为我的陈述是错误的,所以帮助))。
1) “DI”和“IOC” - 相同。
2) “IOC Container” - 它是一个对象的实例,可以解决以下依赖关系:
void Test()
{
// create IOC Container to resolve
// dependences for SomeMethod method
var container = new SomeContainer();
container.For(typeof(IEmaleSender), typeof(SuperEmaleSender));
// Pass IOC Container to resolve dependences in SomeMethod
SomeMethod(container);
}
void SomeMethod(SomeContainer container)
{
IEmaleSender emailSender = container.Resolve(IEmaleSender);
emailSender.SendEmail();
}
3) “服务定位器” - 它类似于包含 Dictionary<Type, object> 的静态对象,其中 value 是键类型的实例。这个静态对象有两种方法:Add 和Get。所以我可以在我的应用程序开始时添加对象并从任何地方请求它:
void Test()
{
// Assign instanse of SuperEmaleSender to Locator
SuperEmaleSender emailSender = new SuperEmaleSender()
SomeLocator.Add(typeof(SuperEmaleSender), emailSender);
SomeMethod();
}
void SomeMethod()
{
SuperEmaleSender emailSender = SomeLocator.Get(typeof(SuperEmaleSender));
emailSender.SendEmail();
}
4) 结合“服务定位器”和“IOC 容器”是一个很好的做法。因此,您可以在应用程序启动时实例化“IOC Container”,并通过“Service Locator”从任何地方请求它。
5) 在 ASP MVC5 中,已包含“服务定位器”。我说的是DependencyResolver。
感谢您的帮助。
【问题讨论】:
标签: c# design-patterns dependency-injection ioc-container service-locator