1

Ninjectを使用したいMVC4アプリケーションがあります。Ninject 3パッケージにNuGetを使用しましたが、構成に問題があります。NuGetのインストールにより、ファイルが作成されました。

public static class NinjectWebCommon 
{
     // Not included for brevity

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {

    }
}

Web構成を強く入力するために使用しているクラスがあります。このクラスをAppEnvironmentと呼び、単体テスト用のIAppEnvironmentのインターフェイスを備えています。RegisterSevices関数内で次のことができることを知っています。

kernel.Bind<IAppEnvironment>().To<AppEnvironment>();

ただし、これは、各バインディングを一度に1つずつ指定する必要があることを意味します。以前のプロジェクトでは、インターフェイスクラスのIだけが削除された状態で、デフォルトでインターフェイスの新しいインスタンスにバインドするようにNinjectを構成していました。NInjectを使用してジェネリックインターフェイスをバインドする方法を確認しました。ジェネリック型のバインドが設定されていない場合はデフォルトで、IServiceの.InheritedFrom(typeof(IService<>))目的と、構成に使用する必要があるものがわかりません。 。

これを機能させる方法についての手がかりはありますか?

4

1 に答える 1

2

InheritedFrom(typeof(IService<>))によって返されるタイプSelectAllClasses()(アセンブリ内のすべてのタイプ)をフィルタリングして、であるタイプのみを含めますIService<Something>

あなたのシナリオでは、コンベンション拡張機能を使用して次のことを行うことができます。

kernel.Bind(x => x.FromThisAssembly()
                  .SelectAllClasses()
                  .BindDefaultInterface());

BindDefaultInterfaceあなたが説明した命名規則(これは一般的です)を前提としています:例えばFoo、にバインドされていIFooます。

于 2012-09-05T13:27:32.130 に答える