0

まず第一に、私は初めてですNinject

MVC4 で Action Filter にバインドしようとしています。

SOで多くの質問を見つけましたが、それらはすべてMVC3-2に関するものであり、それらのほとんどは数年前のものです- MVC3Filter configurationsNinject および 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;getに追加しようとしましたBindFilter

しかし、私は見つけることができませんでしNinject MVC4NuGet

Ninject.MVC3 を使用する必要がありますか?

どんな提案でも大歓迎です!

ここに画像の説明を入力

4

1 に答える 1