我在這裏有一種情況,看起來非常像來自NHibernate世界的「SELECT N + 1」。如何解決當前LifeTimeScope中存在其他組件的組件?
我創建一個應用程序ASP.NET MVC應用程序和的HomeController需要一個IUserSignUpService。 IUserSignUpService「活在」應用程序服務層其中它綁定到具體類UserSignUpService。
的UserSignUpService有2依賴性:
public IUserRepository UserRepository { get; set; }
public Domain.Services.IUserSignUpService SignUpService { get; set; }
public UserSignUpService(IUserRepository userRepository, Domain.Services.IUserSignUpService signUpService)
{
this.UserRepository = userRepository;
this.SignUpService = signUpService;
}
當Autofac是解決IUserSignUpService一種生活應用服務層中,它需要解決IUserRepository依賴的是生活在持久層和中Domain.Services.IUserSignUpService(我知道,名字相同,但他們不同),它們位於域內,並在向數據庫執行INSERT SQL之前執行多個操作。
的IUserRepository接口是由需要一個的ISession例如經由構造待注射UserRepository類中實現。這裏
我的觀點是:
如果我繼續使用這種方法,每次我收到的HttpRequest到HomeController的我要開始一個新的ISession(因爲它是UserRepository的構造函數依賴,這是一個構造函數依賴於IUserSignUpController,它是HomeController的構造函數依賴項)。
我並不需要每一次。也許我可以指示Autofac只在當前LifeTimeScope中存在IUnitOfWork接口的實例時解析ISession。
可能嗎?
你有2個'IUserSignUpService'接口?一個在服務層,一個在域層?這對於任何從事項目工作的人來說都會很困惑。如果他們做了不同的事情(他們肯定會這樣做),請以不同的名稱命名。 – Steven
我會的。現在我正在做一個「超級重構」:)。來自應用程序服務層的IUserSignUpService是協調關於註冊過程(發送電子郵件,移動某些文件等)的各種操作的「起點」,而域中的IUserSignUpService正在處理與域相關的事情。在將值保存到數據庫之前,需要完成域級別的幾項操作。我知道,從外面看的任何人都很困惑。 :) – cidico