ตัวกรอง Ninject to Action สำหรับ MVC4

ก่อนอื่น ฉันยังใหม่กับ Ninject

ฉันกำลังพยายามเชื่อมโยงกับ Action Filter ใน 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