Ninject ke Filter Tindakan untuk MVC4

Pertama-tama, saya baru mengenal Ninject.

Saya mencoba mengikat ke Filter Tindakan di MVC4.

Saya menemukan banyak pertanyaan di SO tetapi semuanya tentang MVC3-2 dan kebanyakan berusia beberapa tahun - MVC3, Konfigurasi filter, Ninjeksi dan MVC3

Berikut ini adalah kode pengujian saya -

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());
    }
}

Saya mencoba menambahkan using Ninject.Web.Mvc.FilterBindingSyntax; untuk mendapatkan BindFilter.

Namun, saya tidak dapat menemukan Ninject MVC4in NuGet

Haruskah saya menggunakan Ninject.MVC3?

Setiap saran akan dihargai!

masukkan deskripsi gambar di sini


person Win    schedule 31.05.2013    source sumber


Jawaban (1)


Ya, gunakan Ninject.MVC3, ini berfungsi dengan baik di MVC4 karena paket nuget akan mengatur penerusan versi. Versi ini tidak akan bekerja secara langsung dengan WebAPI, dan Anda perlu menginstal paket ekstensi jika ingin menggunakan Ninject dengan WebAPI.

person Erik Funkenbusch    schedule 31.05.2013