0

你能幫我一些模式的理論。我試圖描述他們,我盡我所能,但我認爲我的言論是錯誤的,所以幫助))。理論:「服務定位器」「國際奧委會容器」「國際奧委會」「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密鑰類型的一個實例。而這個靜態對象有兩種方法:AddGet。因此,我可以在我的應用程序開始從各處添加對象,要求其:

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

謝謝你的幫助。

回答

1

服務定位器幾乎是一個非常原始的依賴注入。它通常只允許你返回單例實例。它不是真正的DI,因爲你必須手工獲取實例並手動添加新的對象,而不是讓DI引擎爲你做(新建對象並將服務引用注入它們)。 DI還可以讓您更好地控制對象的生命週期。

3

至於組合服務定位器與IoC - 當你有合適的IoC容器時,你真的不應該使用服務定位器(或者在大多數情況下你根本不應該使用它),因爲IoC和DI是從類外部傳遞依賴關係,並明確指定該類具有哪些依賴關係。在裏面使用服務定位器會隱藏依賴關係。 Service locator is by some people considered an anti-pattern

+0

因此,「IOC容器」 - 僅僅是一個實例,而不是一個靜態的對象,所以我必須在orede無處不在注入該容器使用它? –

+0

請原諒我在一週後注意到這個評論,但是因爲我終於注意到了它,所以我想也許我應該回答。 IoC容器只是一個實例,但不應該在任何地方注入。 IoC容器的全部目的是注入依賴關係,而不是被注入到任何地方。 –

0

DI代表Depency Injection和IoC控制反轉。 想象一下你有一個訪問數據庫的類。該類的響應性是插入一個項目,但您需要數據庫連接才能這樣做。如果該類的責任只是插入一個項目,它將不知道如何啓動該連接,只知道如何使用它。考慮到這一點,你會將連接設置爲該類的依賴關係,將創建該連接的責任傳遞給任何想要使用它的人。您正在使用依賴注入反轉控制,將責任傳遞給任何知道連接如何工作的人。

您可以使用IoC容器來幫助您管理類之間的依賴關係。

你可以看到這個問題的更詳細的解答:Inversion of Control vs Dependency Injection

+0

是的,但DI和IoC有什麼區別?或者它只是同一個事物的不同名稱? –

+1

我認爲這個答案對你很有用:http:// stackoverflow。com/questions/6550700/inversion-of-control-vs-dependency-injection –

+0

依賴注入是一種模式,控制反轉是OOP的一個原則。 –