我有一个特定的工厂,它创建(在自己的程序集中)一些接口实现:
public static IDataSource<T> CreateDataSource<T>(DataContext dataContext) { ... }
我需要在我的nInject
内核绑定器中使用它。所需的绑定类似于IDataSource<T> -> Factory.CreateDataSource<T>(dataContext)
。
但问题是以下内容无法编译: -
kernel.Bind(typeof(IDataSource<>))
.ToConstructor(ctx =>(Action<DataContext,>)Factory.CreateDataSource)
我尝试了其他类似的东西,但无法让它们编译。无论如何(我猜)我需要这个T
泛型类型来指定。
kernel.Bind(typeof(IDataSource<>))
.ToConstructor(ctx => Factory.CreateDataSource(ctx.Inject<DataContext>()))
这仍然无法编译,因为T
类型需要它。
我怎样才能与这种方法结合?
答案 0 :(得分:1)
你不能。 ToConstructor
期望GenericDataSource<MyData>()
之类的构造函数不会使用开放式泛型。请改用WithConstructorArgument
。