Ostatnio napotkałem na problem wstrzykiwania w konstruktorze kolekcji obiektów danego typu. Zobaczmy na prostą hierarchię klas:
Code:
public abstract class A
{
}
public class B : A
{
}
public class C : A
{
}
Chcąc następnie wstrzyknąć taką hierarchię w konstruktorze klasy jako:
Code:
public class D
{
private readonly IEnumerable<A> _resolvedClasses;
D(IEnumerable<A> resolvedClasses)
{
_resolvedClasses = resolvedClasses;
}
}
Otrzymamy następujący błąd:
Aby poprawnie wykonać operację wstrzyknięcia wszystkich klas potomnych po A należy zarejestrować każdy z typów jako nazwany:
Code:
unityContainer.RegisterType<A, B>("B");
unityContainer.RegisterType<A, C>("C");
Następnie dopisujemy linijkę rejestrującą IEnumerable od naszego typu:
Code:
unityContainer.RegisterType<IEnumerable<A>>(new InjectionFactory(x => x.ResolveAll<A>()));
Po takim zabiegu możemy już bez przeszkód korzystać z kolekcji obiektów danego typu w konstruktorach.
Brak komentarzy:
Prześlij komentarz