【问题标题】:Using Open Generics with Funq在 Funq 中使用开放泛型
【发布时间】:2016-03-31 14:35:29
【问题描述】:

我有如下界面:

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;
    }
}

请注意,泛型类型参数在需要实例的地方是封闭的。

我在 Funq 中看不到任何方法。是否可以?或者其他 IOC 是否允许这种用途?

【问题讨论】:

    标签: c# servicestack ioc-container funq


    【解决方案1】:

    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。

    【讨论】:

    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    相关资源
    最近更新 更多