ก่อนอื่น ฉันยังใหม่กับ 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 หรือไม่
ข้อเสนอแนะใด ๆ จะได้รับการชื่นชม!