[英]Using Open Generics with Funq
我有以下界面:
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是否允許這種用途?
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.