7

NuPackアドインを使用してNInjectMVC3パッケージをインストールすると、生成されたファイルで次のコンパイルエラーが発生し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));
    }
}
4

3 に答える 3

13

基本的に、MvcServiceLocatorなくなっています。ビデオが作られたときはいつでも、バージョンにミスマッチがあったと思います。

ここここで利用できる優れた説明があります。

Ninjectを機能させる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());
于 2010-10-06T17:55:01.210 に答える
5

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

于 2010-10-06T18:20:37.280 に答える
1

Ninject.MVC30.3をインストールしました。ASP.NETMVC3ベータ版を使用しています。

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);
    }

およびはModelsフォルダーで作成したクラスであり、コンストラクターの依存関係をに追加しましIProductRepositoryた。コードは次のとおりです。SqlProductRepositoryHomeController

    private IProductRepository products;

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

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

于 2010-10-10T15:58:47.203 に答える