J'essaye d'obtenir une initialisation paresseuse avec SimpleInjector et en utilisant Generics, je reçois une erreur dans mon AService.cs lors de l'envoi de Lazy dans le constructeur de base. J'ai lu que Lazy ne supporte pas la covariance, mais ma question est comment obtenir une solution de contournement pour utiliser des génériques avec IoC et Lazy.Impossible de convertir System.Lazy <IARepository> en System.Lazy <IGenericRepository>
AService.cs
public class AService : GenericService, IAService
{
private readonly Lazy<IARepository> aRepository;
public AService(Lazy<IARepository> aRepository) : base(aRepository)
{
this.aRepository = aRepository;
}
}
IAService.cs
public interface IAService : IGenericService
{
}
IGenericService.cs
public interface IGenericService
{
void DoSomething();
}
GenericService.cs
public class GenericService : IGenericService
{
private readonly Lazy<IGenericRepository> genericRepository;
public GenericService(Lazy<IGenericRepository> genericRepository)
{
this.genericRepository = genericRepository;
}
public void DoSomething()
{
genericRepository.Value.DoSomething();
}
}
Manchettes à Injector simple
container.Register<Lazy<IARepository>>(
() => new Lazy<IARepository>(container.GetInstance<ARepository>));
container.Register<Lazy<IBRepository>>(
() => new Lazy<IBRepository>(container.GetInstance<BRepository>));
container.Register<Lazy<IAService>>(
() => new Lazy<IAService>(container.GetInstance<AService>));
double possible: http: //stackoverflow.com/questions/21117619/covariant-use-of-generic-lazy-class-in-c-sharp – Michael
Voir aussi https://msdn.microsoft.com/fr-fr/library/dd799517(v= vs.110) .aspx – Michael