我現在對DI和IoC容器有了很好的理解,但是我不確定如何處理在多個「模塊」(DLL,無論)中有幾十個類的真實世界方面。幾乎所有我見過的IoC示例都可能使用少數幾個類,並在Main方法(或Global.asax,如果是Web應用程序)中手動設置容器,這對於大型應用程序來說是瘋狂的有數百行只使用For<I>().Use<T>()
語法來設置所有內容。「現實世界」中的IoC - 如何處理多個類?
我已經做了一些研究,這似乎是註冊表(StructureMap)和內核(Ninject)類的目的(這些是我熟悉的兩個IoC容器,所以在這裏提到它們 - 我相信其他IoC容器也有類似的東西)。
現在,我的問題是您是否打算創建與您的應用中的每個分組對應的不同註冊表(我一直在玩StructureMap,因此我會堅持使用該命名法)(例如存儲庫,實體,服務)讓我們假設一個「基礎設施」類庫,然後在主應用程序入口點連接這些類?我想你可以走得更遠,爲每個聚集(爲了使用DDD術語)有一個註冊表,然後將所有註冊表連接到更廣泛的註冊表類中,這些註冊表類包含整個應用程序的一部分(例如,較大的LOB應用程序的CRM部分可能本身有幾個聚集,所以你有一個註冊表接線,每個聚集,然後,結合所有的彙集登記更大的註冊表..我希望是有道理的)
對於一個簡單的例子:
// MyApp.Infrastructure
class ServiceRegistry : Registry
{
public ServiceRegistry()
{
For<IOrderService>().Use<OrderService>();
// other services...
}
}
class RepositoryRegistry: Registry
{
public RepositoryRegistry()
{
For<IOrderRepository>().Use<OrderRepository>();
// other repositories...
}
}
// other registry files e.g. for Entities
// Global.asax or Program.cs or whatever entry point
ObjectFactory.Initialize(x => {
x.AddRegistry<ServiceRegistry>();
x.AddRegistry<RepositoryRegistry>();
// other registries
});
這是處理現實世界的應用程序的首選方式,可能有幾十個,如果不是數百個類的邏輯組織?