将类型绑定到泛型方法或构造函数

时间:2012-11-12 06:45:04

标签: c# generics types ninject bind

我有一个特定的工厂,它创建(在自己的程序集中)一些接口实现:

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类型需要它。

我怎样才能与这种方法结合?

1 个答案:

答案 0 :(得分:1)

你不能。 ToConstructor期望GenericDataSource<MyData>()之类的构造函数不会使用开放式泛型。请改用WithConstructorArgument