Ich habe die interafes und Klassen, die oben in meinem Projekt:Wie registrieren Typen Parameter Konstruktor unterschiedlichen [Unity IoC]
public interface IRepositoryBase<T> : IDisposable where T : class { }
public interface IUserRepository : IRepositoryBase<User> { }
public interface IPaymentRepository : IRepositoryBase<Payment> { }
public class SecurityContext : DbContext { }
public class FinanceContext : DbContext { }
public class RepositoryBase<T> : IRepositoryBase<T> where T : class
{
public RepositoryBase(DbContext context) { }
}
Ich versuche, die richtige DbContext auf die Objekte aus dem IUserRepository e erstellt zu injizieren IPaymentRepository Schnittstellen:
- IUserRepository -> sollten als neue RepositoryBase (neu Security()) gelöst werden
- IPaymentRepository -> als neu gelöst werden sollte RepositoryBase (neu FinanceContext())
ich den Code unten ohne Erfolg versucht:
container.RegisterType<IUserRepository, RepositoryBase<User>>(
new InjectionConstructor(container.Resolve<SecurityContext>()));
... und bekam den folgenden Fehler
Der Typ 'RepositoryBase' kann nicht sein, verwendet als Typ Parameter 'TTo' im generischen Typ oder Methode 'Microsoft.Practices.Unity.UnityContainerExtensions.RegisterType (Microsoft.Practices.Unity.IUnityContainer, Params Microsoft.P ractices.Unity.InjectionMember []) '. Es gibt keine implizite Referenzkonvertierung von 'RepositoryBase' zu 'IUserRepository'.
[EDIT] änderte ich den Ansatz, wie Georg vorgeschlagen und es funktioniert super.
beseitigen Nachdem die IUserRepository und IPaymentRepository Schnittstellen ich die Art, wie folgend registriert:
container.RegisterType<IRepositoryBase<User>, RepositoryBase<User>>
(new InjectionConstructor(typeof(SecurityContext)));
Schließlich hatte ich gerade meinen Dienst zu ändern, ein IRepositoryBase injiziert in seinem Konstruktor zu empfangen.
public class UserService : IUserService
{
private readonly IRepositoryBase<User> _repository;
public ColaboradorService(IRepositoryBase<User> repository)
{
_repository = repository;
}
}
Klingt wie eine Kovarianz/Kontravarianz Problem, versuchen Sie Folgendes: http://tomasp.net/blog/varicance-explained.aspx/ – Charleh