6

當我在我正在進行的項目中對Ninject進行拍攝時,我最近碰到了一堵磚牆。靜態依賴注入工廠,對還是錯?

我已經經歷了各種各樣的問題,系統地提出了我的設計和架構以支持依賴注入。

  1. Is this right to inject the container/kernel to the main application presenter?

  2. How to configure Ninject to use along with NHibernate in WinForms?

  3. Conditional dependency injection binding only when property not null

  4. What did I get wrong, DI or Design, and how should I go about it?

小時後,和小時,海小時在我看來,這篇文章來自Justin Etheredge,他講述了他的靜態DIFactory課程。

我現在不知道,是不是使用靜態DI工廠做事情的工作像變魔術?

我想聽聽在實際應用中使用靜態DI工廠的優缺點。

另外,IoC和DI是否相同,還是非常相似,但有些區別?

回答

7

一個static DI Factory is a Service LocatorService Locator is an anti-pattern,因爲它將使困難的原因有關您的代碼

服務定位器的唯一好處是,它是稍微easier to understand than Dependency Injection。但是,DI並不難於掌握once you get over a few conceptual hurdles

IoC和DI之間的關係是DI is a special case of IoC

+0

如果某些類型無法在應用程序啓動時實例化,那麼該怎麼辦?因爲它們需要用戶憑證才能正確實例化?例如,'NHibernante.ISessionFactory'就是這樣的問題,因爲它不能在沒有正確的連接字符串的情況下實例化,並且一旦創建,它就不會讓連接字符串改變。作爲一種解決方法,可以提供'IDbConnection',並丟失在整個ISession生命週期中保存對象蹤跡的二級緩存。然後需要用戶提供他的證書,現在'ISessionFactory'依賴不再是一個問題。 –

+0

它會是一個'AbstractFactory',它可以讓新的類型被註冊?你會怎麼做呢? –

+1

如果在運行時無法解析子圖,則始終可以添加另一個間接層。抽象工廠將是一種選擇。這裏有更多關於[實現抽象工廠]的信息(http://blog.ploeh.dk/2012/03/15/ImplementinganAbstractFactory)。 –