Jedność Zarejestruj się dla jednego interfejsu Wiele obiektów i Powiedz jedność Gdzie je wstrzyknąć
Cześć Mam problemy z powiedzeniem Unity, że dla interfejsu, jeśli ma wiele implementacji, chcę, aby wstrzyknął je w różnych klasach. Oto, co mam na myśli:
Powiedzmy, że mam interfejsIProductCatalogService
i dwie implementacjeProductCatalog : IProductCatalogService
iProductCatalogService : IProductCatalogService
.
Jak mógłbym powiedzieć Unity, że dla klasy A, którą chcę w moim konstruktorze, przekazałem instancję typuProductCatalog
i dla klasyB
Chcę instancjiProductCatalogService
.
Używam Unity w projekcie ASP.NET Web API i ustawiłem resolver wGLobalConfiguration
.
W przypadku prostych rejestracji od 1 do 1 wszystko działa.
Oto, co próbowałem, ale wydaje się, że nie działa:
public class DependencyServiceModel
{
public Type From { get; set; }
public Type To { get; set; }
public IEnumerable<Type> ForClasses { get; set; }
}
public void RegisterTypeForSpecificClasses(DependencyServiceModel dependencyService)
{
foreach (var forClass in dependencyService.ForClasses)
{
string uniquename = Guid.NewGuid().ToString();
Container.RegisterType(dependencyService.From,
dependencyService.To, uniquename);
Container.RegisterType(forClass, uniquename,
new InjectionConstructor(
new ResolvedParameter(dependencyService.To)));
}
}
wDependencyServiceModel
, From
to jest interfejsTo
jest obiektem, którego chcę utworzyć instancję iForClasses
są typem, dla którego chcę użyćTo
Obiekt.