所以我在我的應用程序中使用Autofac,看起來如下(從上到下的方法)。Autofac - DDD分層應用程序 - iRepository的參考泛型 - howto?
該項目是在MVC 4中,我添加了AutoFac.MVC4測試版。
- Web應用程序客戶端(Web應用程序 - 表現層):命名空間= AppBase.Web
- Web App的核心(如各種actionresults,...。):命名空間= AppBase.Web.Core
- 服務(如AuthenticationService,MemberService,TaskService):namespace = AppBase.Service
- Data(包括Repositories,...):namespace = AppBase.Data
- Domain(POCO對象Code Fist):namespace = AppBase。域名
我在Web應用程序客戶端與下面的初始化代碼包括Autofac(現在):
public void RegisterContainersUsingAutofac()
{
var builder = new ContainerBuilder();
builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
builder.RegisterModelBinderProvider();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
Web應用程序客戶端引用核心,域名和服務層。 服務層引用數據層(對於存儲庫)。
我有我叫iRepository數據層的接口,我所有的庫實現這些
我想知道,我是否應該添加到我的「RegisterContainersUsingAutofac」的方法是什麼代碼,全自動(以一般的方式)增加所有的存儲庫和服務,所以我不應該每次都添加myselve。 請記住,數據層沒有被引用(我可以,但我不認爲它應該)。
PS。我過去使用過Unity,但是我喜歡AutoFac所具有的通用方法(在一個項目中,我有超過+/- 180行添加存儲庫和服務的功能,所以這是我不想要的)。
只是一個小問題。 我的global.asax.cs是,我沒有得到我的數據層的引用,但我的服務層引用數據層。 我該如何添加存儲庫呢?由於DDD設計禁止我添加數據層,因爲它不公開任何服務。 – NicoJuicy
不確定您正在使用的實施架構。就我而言,我的數據層是我的Repository庫。爲了使DI工作,您仍然需要將對UI項目的引用添加到數據層。 如果你打算使用DI,調用應用程序(在這種情況下是UI)需要定義在遇到接口時要注入的內容。 服務層沒有地方可以定義啓動時,UI會這樣做。 因此在調用應用程序中需要引用數據層(Repository)。用戶界面不會調用任何存儲庫方法,這發生在服務層。 –