你能幫我一些模式的理論。我試圖描述他們,我盡我所能,但我認爲我的言論是錯誤的,所以幫助))。理論:「服務定位器」「國際奧委會容器」「國際奧委會」「DI」
1)「DI」和「IOC」 - 相同。
2)「IoC容器」 - 這是一個對象的實例,可以解決類似的依賴性:
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容器」,並通過各處的「服務定位器」來請求它。
5)在ASP MVC5中,「服務定位器」已包含在內。我正在談論DependencyResolver
。
謝謝你的幫助。
因此,「IOC容器」 - 僅僅是一個實例,而不是一個靜態的對象,所以我必須在orede無處不在注入該容器使用它? –
請原諒我在一週後注意到這個評論,但是因爲我終於注意到了它,所以我想也許我應該回答。 IoC容器只是一個實例,但不應該在任何地方注入。 IoC容器的全部目的是注入依賴關係,而不是被注入到任何地方。 –