2012-03-31 3 views
1

Я вижу there is an extension for Ninject integration с asp.net-mvc, но похоже, что я могу интегрировать Ninject с mvc fine без этого расширения. Например:Нужно ли использовать расширение ninject.mvc?

public class NinjectDependencyResolver : IDependencyResolver 
    { 
     private readonly IResolutionRoot _resolutionRoot; 

    public NinjectDependencyResolver(IResolutionRoot resolutionRoot) 
    { 
     _resolutionRoot = resolutionRoot; 
    } 

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

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


public class MvcApplication : HttpApplication 
{ 
    void Application_Start() 
    { 
     var modules = new INinjectModule[] { new ServiceModule() }; 
     var kernel = new StandardKernel(modules); 

     DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 

Это какое-то унаследованное расширение или оно по-прежнему актуально? Я вижу последние обновления исходного кода, поэтому я был немного смущен

ответ

5

Вы можете реализовать свой собственный резонатор зависимости. Так что да, вам это не нужно. Вы можете легко интегрировать Ninject без расширения. Но почему вы должны это делать? Расширение Ninject.MVC3 обеспечивает все, чтобы добавить поддержку Ninject без необходимости реализовать собственный Resendver Dependency. Это имеет ряд преимуществ:

  1. В отличие от реализации, которую вы предлагаете, реализация этого расширения правильная и доказанная для работы во многих приложениях.
  2. Он поддерживается вместе с ядром Ninject. В случае изменения ядра Ninject все необходимые изменения будут сделаны для вас. Например. Ядро Ninject 3.0.0 больше не имеет InRequestScope, но с Ninject.MVC3 у вас все еще есть эта область.
  3. Это расширение гораздо больше, чем резонатор зависимости. Прочитайте the documentation!
  4. Он бежит стороной в сторону с другими веб-технологиями, и конфигурация может использоваться совместно. Например. MVC4 Web API, WCF, WebForms
+0

относительно № 1, что не так с предлагаемой реализацией? – leora

+0

@leora - я не знаю, что с рук, но так как Remo написал существующий, и, глядя на код, он делает намного больше вещей (например, имея дело с областью запроса, я думаю?), Я бы предположил, что есть, по крайней мере, область поддержки запроса "(но не уверен, что это правда или нет) –

+0

@leora Он не обрабатывает многократное перечисление правильно, что приведет к странному поведению - это некоторые сценарии. И из-за TryGet будет очень сложно обнаружить некоторые проблемы с конфигурацией. –

Смежные вопросы