将开放泛型与 Funq 结合使用
Using Open Generics with Funq
我有以下界面:
public interface IWriter<in TId, TViewModel>
为此有许多不同的实现,例如:
public class RedisWriter<TId, TViewModel> : IWriter<TId, TViewModel>
我希望能够将此 class 的实例注入到服务的构造函数中:
public class MyService : Service
{
private readonly IWriter<Guid, OrderViewModel> _writer;
public MyService(IWriter<Guid, OrderViewModel> writer)
{
_writer = writer;
}
}
请注意,泛型类型参数在需要实例的地方关闭。
我在 Funq 中看不到任何方法。可能吗?或者其他国际奥委会是否允许这种用途?
Funq 不支持构建基于开放通用注册的封闭实现。使用 Funq,您将必须显式注册应用程序所需的所有封闭通用实现。例如:
c.Register<IWriter<Guid, OrderViewModel>>(c => new RedisWriter<Guid, OrderViewModel>());
c.Register<IWriter<int, UserViewModel>>(c => new RedisWriter<int, UserViewModel>());
do other IOCs allow this kind of use?
是的,所有流行的 DI 库都支持这个,例如 Simple Injector、Autofac、Castle Windsor、Ninject 和 StructureMap。
我有以下界面:
public interface IWriter<in TId, TViewModel>
为此有许多不同的实现,例如:
public class RedisWriter<TId, TViewModel> : IWriter<TId, TViewModel>
我希望能够将此 class 的实例注入到服务的构造函数中:
public class MyService : Service
{
private readonly IWriter<Guid, OrderViewModel> _writer;
public MyService(IWriter<Guid, OrderViewModel> writer)
{
_writer = writer;
}
}
请注意,泛型类型参数在需要实例的地方关闭。
我在 Funq 中看不到任何方法。可能吗?或者其他国际奥委会是否允许这种用途?
Funq 不支持构建基于开放通用注册的封闭实现。使用 Funq,您将必须显式注册应用程序所需的所有封闭通用实现。例如:
c.Register<IWriter<Guid, OrderViewModel>>(c => new RedisWriter<Guid, OrderViewModel>());
c.Register<IWriter<int, UserViewModel>>(c => new RedisWriter<int, UserViewModel>());
do other IOCs allow this kind of use?
是的,所有流行的 DI 库都支持这个,例如 Simple Injector、Autofac、Castle Windsor、Ninject 和 StructureMap。