Obecnie używamy Unity dla naszych Usług Windowsi aplikacje MVC i działa dobrze. Tworzymy kontener ChildContainer dla każdego żądania internetowego i definiujemy zastrzyk DbContext jako hierarquical, więc każde żądanie sieciowe ma własną instancję kontekstu. Posiadamy również klasę BaseDbContext, która zapewnia, że ustawienia EF są spójne we wszystkich naszych kontekstach.
Jak na razie dobrze. Problemem jest teraz dodanie drugiej bazy danych, a zatem drugi kontekst, który również dziedziczy po BaseDbContext.
Nie możemy skonfigurować Unity do wstrzykiwania różnych kontekstów, ponieważ klasa podstawowa jest taka sama.
Rozwiązaniem, które znaleźliśmy, było stworzenie ContextProvider gdzie T: BaseDbContext i zarejestruj to w Unity, abyśmy mogli rozróżnić kontekst według typu.
Jednak nie wydaje się to właściwe, ponieważ Unity powinna być w stanie poradzić sobie z tym scenariuszem.
Jakie są sugerowane podejścia do rozwiązania tego problemu?
Dzięki.
Odpowiedzi:
0 dla odpowiedzi № 1Możesz dokonać dwóch rejestracji tego samego typu, używając nazwanych rejestracji:
Container
.RegisterType<BaseDbContext>("context1", ...)
.RegisterType<BaseDbContext>("context2", ...)
Oraz w kodzie klienta:
public void MyClass {
public MyClass([Dependency("context1")] BaseDbContext context1,
[Dependency("context2")] BaseDbContext context2) {
....
}
}