Почему сгенерированные NinjectMVC3.cs из nupack не компилируют? (или что случилось с MVCSERVICELOCATOR в ASP.NET MVC 3 BETA?)

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

  •  28-09-2019
  •  | 
  •  

Вопрос

Использование Addin Nupack и установка пакета Ninject MVC 3 приводит к следующей ошибке компиляции в сгенерированном NinjectMVC3.cs файл.

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

То Образец видео Давид Эббо опубликовал это работает просто в 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 ушел Всякий раз, когда видео было сделано, в версиях было несоответствие, я думаю.

Есть отличные объяснения доступны здесь а также здесь.

Две шаги, которые сделают Ninject работать следующим образом. Заменять 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 BETA.

Я добавил этот код в мой 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);
    }

То IProductRepository а также SqlProductRepository это классы, которые я сделал в папке моих моделей, и я добавил зависимость конструктора для моего HomeController. Отказ Вот код:

    private IProductRepository products;

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

Я добавил некоторые точки останова и запустил приложение, и он работает как очарование. Надеюсь это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top