Unity pozwala wymienić różne implementacje tego samego interfejsu, a następnie rozwiązać je według nazwy:Warunkowo rozwiązać nazwie wdrożenie w Jedności
var container = new UnityContainer();
// register
container.Register<IFish, OneFish>("One");
container.Register<IFish, TwoFish>("Two");
// resolve
var twoFish = container.Resolve("Two");
Załóżmy teraz mam klasy, który zależy od IFish i implementuje ITank:
class Tank : ITank
{
public Tank(IFish fish) {...}
}
Jak mogę rozwiązać problem z ITank i określić, którą implementację IFish uzyskać?
To nie działa:
container.Register<ITank, Tank>();
var tank = container.Resolve<ITank>("One");
to działa:
var fish = container.Resolve<IFish>("One");
var tank = container.Resolve<Tank>(new DependencyOverride(typeof(IFish), fish);
ale obsługuje tylko proste przypadki (tak jak w tym przykładzie), nie ogólnym przypadku, gdzie może być wiele implementacje o nazwie "Jeden". Co chcę jest aby móc powiedzieć do jedności:
„Przy rozwiązywaniu implementacje używać nazwanych«One», jeśli nie taka realizacja jest rejestr spaść z powrotem do bezimiennego realizacji”
Czy istnieje zwyczaj rezolwer które można podłączyć do Unity przy takim zachowaniu?
dostałeś odpowiedzi na zapytania tutaj? Mam do czynienia z podobnym problemem. – Nishith
Przykro mi. W końcu mogę napisać rozszerzenie dla Unity, ale proste rozwiązanie, które opisałem, wystarcza teraz dla moich potrzeb. Zaktualizuję, jeśli to zrobię. –