9

MVC4に移植したいMVC3アプリケーションがあります。依存性注入にNinjectを使用しています。Nugetを使用して、プロジェクトに「Ninject」を追加し、次のようにコントローラーファクトリを作成しました。

public class NinjectControllerFactory : DefaultControllerFactory
{
    private IKernel ninjectKernel;

    public NinjectControllerFactory()
    {
        ninjectKernel = new StandardKernel();
        AddBindings();
    }

    protected override IController GetControllerInstance(RequestContext  requestContext, Type controllerType)
    {
        return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
    }

    private void AddBindings()
    {
        //Add ninject bindings here
    }
}

これはMVC3では正常に機能しますが、MVC4では状況が変わりました。私はいくつか掘り下げて、MVC4でninjectを機能させる方法を説明するこのリンクを見つけました

http://haacked.com/archive/2012/03/11/itrsquos-the-little-things-about-asp-net-mvc-4.aspx

ただし、上記のリンクのコードをコンパイルするのに問題があります。具体的には、web.commonファイルのStart()メソッドに配置することになっているコードで、未解決の名前空間エラーが発生します

GlobalConfiguration.Configuration.ServiceResolver
  .SetResolver(DependencyResolver.Current.ToServiceResolver());

「ServiceResolver」と「.SetResolver」はどちらも未解決です。これらを有効にするには、どのような参照を追加する必要がありますか?また、可能であれば、nugetパッケージninject.mvc3をインストールせずにMVC4でninjectを機能させる方法を示すチュートリアルを教えていただけますか?これらのnugetパッケージが更新された場合に問題が発生しないようにするために、MVC3用に作成されたパッケージをアプリケーションにインストールしたくないのでお願いします。

編集:VisualStudio2012と.Net4.5を使用していることを追加する必要があります

4

2 に答える 2

14

Philの記事は、WebAPIでのNinjectの使用に関するものです。それはあなたが意味することですか?通常のMVCインジェクションでは、これを行う必要はありません。また、MVC4でNinject.MVC3 NuGetパッケージを使用する必要があります(はい、MVC3と表示されていますが、NuGetがすべてを正常に機能させるアセンブリバージョンリダイレクトを設定しているため、正常に機能します)。コントローラファクトリが必要です。NinjectWebCommon.csファイルを編集してバインディングを追加するだけです。

于 2012-09-13T15:02:31.583 に答える
0

名前空間を追加するだけです

Using Ninject;

Nugetからテンプレートをインストールした後...Uは「Ninject」をインストールするだけで、Nugetテンプレートから「NinjectforMVC3」はインストールしません

于 2013-08-14T07:01:30.517 に答える