【发布时间】:2017-01-12 06:23:29
【问题描述】:
我正在尝试使用 SimpleInjector 实现延迟初始化,并使用泛型在基础构造函数中发送延迟时,我的 AService.cs 中出现错误。我读过 Lazy 不支持协方差,但我的问题是如何获得任何解决方法来将泛型与 IoC 和 Lazy 一起使用。
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();
}
}
简单注入器中的绑定
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>));
【问题讨论】:
标签: c# generics inversion-of-control repository-pattern lazy-initialization