Ciao Ho avuto problemi nel cercare di dire a Unity che per un'interfaccia se ha più implementazioni, voglio che le iniettino in classi diverse. Ecco cosa Voglio dire:Unity Register per un'unica interfaccia Più oggetti e comunica unità Dove iniettarli
Diciamo che ho un'interfaccia IProductCatalogService
e due implementazioni ProductCatalog : IProductCatalogService
e ProductCatalogService : IProductCatalogService
.
Come potrei fare per raccontare l'Unità che per la Classe A che voglio nella mia costruttore ha approvato un'istanza di tipo ProductCatalog
e per la Classe B
voglio un'istanza di ProductCatalogService
.
Sto utilizzando Unity in un progetto API Web ASP.NET e ho impostato il resolver nello GLobalConfiguration
.
Per semplici registrazioni da 1 a 1 tutto funziona.
Ecco quello che ho provato ma non sembra funzionare:
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)));
}
}
Nel DependencyServiceModel
, From
è l'interfaccia, To
è l'oggetto da strega voglio istanziare e ForClasses
sono il tipo per che voglio usare l'oggetto To
.
C'è un modo di fare questo senza farmaci generici non posso fornire un tipo esatto al momento della registrazione, come potete vedere dal mio codice – aleczandru
Naturalmente, l'unità ha metodi di registrazione sia generico e versioni non generiche. –
Modificato il mio post per indicare cosa hai sbagliato. –