새로운 MVC 프로젝트를 설정하고 구조 맵을 사용하여 DI/IoC를 처리하고 있습니다. 저장소 클래스 및 EF 데이터 컨텍스트를 사용하여 Entity Framework 및 캐싱 저장소를 사용하고 있습니다. CacheRepository 및 EFRepository -조건부 구조 맵을 사용하여 DataContext 선택
그래서, 콘크리트에 의해 구현되는 IRepository이 (간체). EFRepository는 DataContext에 (DbContext)에 의존하고 IService CacheRepository는 (영구 저장소 대체로) IRepository에 의존하고 이 ICachingService (그래서 내 캐시 공급 업체를 선택할 수 있습니다), 다음 은 서비스으로 구현되며 저장소의 수에 따라 다릅니다.
내 문제는 내 로그인 데이터베이스가 사이트의 어떤 영역에 로그인했는지에 따라 다릅니다 (예 : 관리자가 별도의 로그인 데이터베이스를 가지고 있음 - 여기서는 다루지 않습니다). 나는 내 모든 사용자 테이블을 포함하는 기본 datacontext를 가지고 있으며 두 개의 주요 datacontexts에서 상속받습니다. 그래서 사용자가 로그인을 시도하는 사이트의 영역에 따라 세부 정보를 확인할 데이터베이스가 결정됩니다. 따라서 컨트롤러에 따라 datacontext 또는 connectionstring을 선택할 수 있어야합니다.
누군가가 나에게 datacontext/connectionstring 컨트롤러를 기반으로이 조건부 선택을 달성하는 방법에 관해서 몇 가지 지침을 제공 할 수 있습니까?
는내 IOC의 레지스트리는 현재 다음과 같이합니다 (datacontexts 중 하나 참조) 같습니다
아키텍처의 큰 그림을 보지 않고 대답을하지만, SomeService가 나타냅니다 당신은 아마 (이런 식으로 뭔가를 할 수 어려운 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>();
행운이 있나요? –
@ Javid_p84, 지금까지 아니오 - 어떤 아이디어? 건배. – Carl
아닙니다. 그것을 극복하기 위해 몇 가지 더미 인터페이스를 추가했습니다. 흥미로운 점은 지금까지는 해결책이 없다는 것입니다 (아니면 최소한 우리가 알지 못하는 것). –