Nupackの生成されたNINJECTMVC3.CSがコンパイルされないのはなぜですか? (または、ASP.NET MVC 3ベータのMVCServicelocatorはどうなりましたか?)

StackOverflow https://stackoverflow.com/questions/3875457

  •  28-09-2019
  •  | 
  •  

質問

Nupack Addinを使用してNinject MVC 3パッケージをインストールすると、生成された次のコンパイルエラーが発生します NinjectMVC3.cs ファイル。

The name 'MvcServiceLocator' does not exist in the current context

サンプルビデオ David Ebboが投稿しました 09:43にうまく機能します.

これが現在生成されているクラスです。

public class NinjectMVC3 {
    public static void RegisterServices(IKernel kernel) {
        //kernel.Bind<IThingRepository>().To<SqlThingRepository>();
    }

    public static void SetupDependencyInjection() {
        // Create Ninject DI Kernel 
        IKernel kernel = new StandardKernel();

        // Register services with our Ninject DI Container
        RegisterServices(kernel);

        // Tell ASP.NET MVC 3 to use our Ninject DI Container 
        MvcServiceLocator.SetCurrent(new NinjectServiceLocator(kernel));
    }
}
役に立ちましたか?

解決

基本的に、 MvcServiceLocator 去りました。ビデオが作られたときはいつでも、バージョンに不一致がありました。

素晴らしい説明があります ここここ.

ニッジを機能させる2つのステップは次のとおりです。交換 NinjectMVC3 以下で(必要ではない名前も変更しました):

public class NinjectResolver : IDependencyResolver
{
    private static IKernel kernel;

    public NinjectResolver()
    {
        kernel = new StandardKernel();
        RegisterServices(kernel);
    }

    public static void RegisterServices(IKernel kernel)
    {
        //kernel.Bind<IThingRepository>().To<SqlThingRepository>();
    }

    public object GetService(Type serviceType)
    {
        return kernel.TryGet(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return kernel.GetAll(serviceType);
    }
}

次の行を追加します App_Start()gloabl.asax.cs

DependencyResolver.SetResolver(new NinjectResolver());

他のヒント

パッケージを修正し、フィードにアップロードしました。あなたがそれを試して、それが今動作していることを確認する機会があれば素晴らしいでしょう。 ninject.mvc3のバージョンを0.1から0.2に増やしました:)

ninject.mvc3 0.3をインストールしたばかりです。 ASP.NET MVC 3ベータを使用しています。

このコードを自分に追加しました Global.asax.cs ファイル:

    public static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IProductRepository>().To<SqlProductRepository>();
    }

    public void SetupDependencyInjection()
    {
        IKernel kernel = new StandardKernel();
        RegisterServices(kernel);
        DependencyResolver.SetResolver(new Ninject.Mvc3.NinjectServiceLocator(kernel));
    }

そして、私は電話を追加しました SetupDependencyInjection() の中へ Application_Start() このように機能します。

    protected void Application_Start()
    {
        SetupDependencyInjection();

        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

IProductRepositorySqlProductRepository モデルフォルダーで作成したクラスであり、コンストラクターの依存関係を追加しました HomeController. 。これがコードです:

    private IProductRepository products;

    public HomeController(IProductRepository productRepository)
    {
        products = productRepository;
    }

ブレークポイントをいくつか追加してアプリケーションを実行しましたが、魅力のように機能します。お役に立てれば。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top