0

(独自のアセンブリ内に)いくつかのインターフェース実装を作成する特定のファクトリを入手しました。

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そのタイプで必要なため、これでもコンパイルに失敗します。

どうすればそのようなメソッドにバインドできますか?

4

1 に答える 1

1

できません。オープンジェネリックでは機能しないToConstructorようなコンストラクターが必要です。代わりにGenericDataSource<MyData>()使用してください。WithConstructorArgument

于 2012-11-12T12:35:34.880 に答える