即使你不使用不同的服務層,就可以完成你想要的東西,這是從分離使用DI的DAL項目的MVC應用程序。
做到這一點的方法是添加幾個項目/組件在導線與您已定義的接口的特定實例的IoC容器之間。
我通常使用這種命名規則:
你的主要MVC項目將不得不爲參考您的抽象和基礎設施項目。您的基礎設施項目將引用Abstract和實例特定的項目,如Business和DAL項目。在Infrastructure項目中,您可以連接依賴關係。
你必須設置你的MVC項目來引導你的IoC的基礎設施組件的機制。您可以在global.asax或App_Start方法中執行該操作,並在基礎結構程序集中調用Registration類。
我們使用StructureMap,但概念是相同的。以下是一些示例代碼。
在您的MVC App中,創建一個App_Start方法來設置DI。
public static class StructuremapMvc
{
public static void Start()
{
// Create new Structuremap Controller factory so Structure map can resolve the parameter dependencies.
ControllerBuilder.Current.SetControllerFactory(new StructuremapControllerFactory());
IContainer container = IoC.Initialize();
DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container);
}
}
在您的基礎結構組裝中,連接相關性。
public static class IoC
{
public static IContainer Initialize()
{
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
x.For<IRepositoryNum1>().Use<Num1Repository>();
x.For<IRepositoryNum2>().Use<Num2Repository>();
x.For<IRepositoryNum3>().Use<Num3Repository>();
});
return ObjectFactory.Container;
}
}
使用回購並不意味着你必須使用DI--他們解決了兩個不同的問題。 –
我建議讀一讀「洋蔥建築學」,我認爲這是一個很好的方法來參考項目。因爲你的用戶界面和數據訪問層在外面都是正確的,所以他們不應該有任何問題彼此引用。 – Charlino