我有以下界面:

public interface IWriter<in TId, TViewModel>

有许多不同的实现,例如:
public class RedisWriter<TId, TViewModel> : IWriter<TId, TViewModel>

我希望能够将此类的实例注入服务的构造函数:
public class MyService : Service
{
    private readonly IWriter<Guid, OrderViewModel> _writer;

    public MyService(IWriter<Guid, OrderViewModel> writer)
    {
        _writer = writer;
    }
}

注意,泛型类型参数在需要实例的地方被关闭。
我看不出有什么办法可以这么做。有可能吗?或者其他IOC允许这种使用吗?

最佳答案

funq不支持基于开放的泛型注册构建封闭的实现。使用funq,您必须显式地注册应用程序所需的所有封闭通用实现。例如:

c.Register<IWriter<Guid, OrderViewModel>>(c => new RedisWriter<Guid, OrderViewModel>());
c.Register<IWriter<int, UserViewModel>>(c => new RedisWriter<int, UserViewModel>());

其他IOC允许这种使用吗?
是的,所有流行的DI库都支持这一点,例如Simple Injector、Autofac、Castle Windsor、Ninject和StructureMap。

关于c# - 在Funq中使用开放泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36336449/

10-11 00:29