Ninject to Action Filter для MVC4

Прежде всего, я новичок в Ninject.

Я пытаюсь выполнить привязку к фильтру действий в MVC4.

Я нашел много вопросов в SO, но все они касаются MVC3-2, и большинству из них уже несколько лет - MVC3, Конфигурации фильтров, Ninject и MVC3

Ниже приведен мой тестовый код:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    [Inject]
    public IProductRepository _productRepository { get; set; }

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var products = _productRepository.Products; // this is null

        base.OnAuthorization(filterContext);
    }
}

public class NinjectControllerFactory : DefaultControllerFactory
{
    private IKernel _kernal;

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

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

    private void AddBindings()
    {
        // This is working in ProductController
        _kernal.Bind<IProductRepository>().To<EFProductRepository>();

        // I'm trying to make this work!
        _kernal.BindFilter<IProductRepository>().To<EFProductRepository>();       
    }
}

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        ControllerBuilder.Current.SetControllerFactory(
           new NinjectControllerFactory());
    }
}

Я попытался добавить using Ninject.Web.Mvc.FilterBindingSyntax;, чтобы получить BindFilter.

Однако я не смог найти Ninject MVC4в NuGet

Должен ли я использовать Ninject.MVC3?

Любое предложение будет оценено!

введите здесь описание изображения


person Win    schedule 31.05.2013    source источник


Ответы (1)


Да, используйте Ninject.MVC3, он отлично работает в MVC4, так как пакет nuget настроит пересылку версий. Однако эта версия не будет работать напрямую с WebAPI, и вам потребуется установить пакет расширения, если вы собираетесь использовать Ninject с WebAPI.

person Erik Funkenbusch    schedule 31.05.2013