我已成立了一個新的MVC項目一個DataContext,而我使用structuremap來處理我的DI/IoC的。我正在使用實體框架和緩存存儲庫,存儲庫類和EF數據上下文。有條件選擇具有structuremap
所以,(簡化的)我有一個IRepository其由混凝土實現 - CacheRepository和EFRepository。 EFRepository取決於DataContext的(的DbContext)和CacheRepository取決於IRepository(作爲持久性存儲庫回退),並ICachingService(所以我可以選擇我的緩存提供商),然後IService通過服務其取決於許多庫來實現的。
我的問題是,根據該網站的區域記錄到(例如管理員有一個單獨的登錄數據庫 - 這是一個原因,我不會進入這裏所做的)我的登錄信息數據庫是不同的。我有一個包含所有用戶表的基礎數據上下文,並從兩個主要的數據上下文繼承;所以根據用戶嘗試登錄的站點區域,決定檢查哪個數據庫的細節 - 所以我需要能夠根據控制器選擇datacontext或連接字符串。
有人能爲我提供一些指導如何實現的datacontext該條件選擇/ ConnectionString的基於控制器上所用structuremap實例?
我的IoC註冊表目前看起來是這樣的(引用datacontexts之一):
For<BaseDataContext>().LifecycleIs<HttpContextLifecycle>()
.Use(x => new AdminDataContext());
//REPOSITORIES
For<IDAL.Repositories.Users.IApplicationUserRepository>()
.Use<DAL.Repositories.Users.EFApplicationUserRepository>();
For<IDAL.Repositories.Users.IUserLoginAttemptRepository>()
.Use<DAL.Repositories.Users.EFUserLoginAttemptRepository>();
For<IDAL.Repositories.Users.IUserRoleRepository>()
.Use<DAL.Repositories.Users.CacheRoleRepository>()
.Ctor<IDAL.Repositories.Users.IUserRoleRepository>()
.Is<DAL.Repositories.Users.EFUserRoleRepository>()
.Ctor<IDAL.Caching.IGenericCachingService<Common.Objects.Data.Users.UserRole>>()
.Is<DAL.Caching.HttpContextGenericCachingService<Common.Objects.Data.Users.UserRole>>();
//SERVICES
For<IBLL.Services.IUserService>()
.Use<BLL.Services.UserService>();
這有什麼好運氣? – 2014-12-22 19:13:21
@ Javid_p84,到目前爲止沒有任何想法?乾杯。 – Carl 2014-12-29 09:51:11
不是真的。我添加了幾個虛擬接口來克服它。有趣的是,迄今爲止還沒有解決方案(或者至少我們不知道)。 – 2014-12-30 17:14:35