asp.net-mvc-3 – 在Application_Start中访问ninject内核
我正在使用Ninject和安装了nuget的MVC3扩展。我的内核设置代码位于App_Start / NinjectMVC3.cs文件中。控制器中的一切都很好,但是我无法弄清楚如何(正确地)绑定Global.asax.cs MvcApplication代码中的接口。
我最终使用hack(创建一个返回bootstrap.kernel的公共NinjectMVC3.GetKernel()方法)。但是,这样做将不再适用,我必须有一个正确的方法来做到这一点。 这是我的代码: public class LogFilterAttribute : ActionFilterAttribute { private IReportingService ReportingService { get; set; } public LogFilterAttribute( IReportingService reportingService ) { this.ReportingService = reportingService; } ... } public class MvcApplication : System.Web.HttpApplication { public static void RegisterGlobalFilters( GlobalFilterCollection filters ) { filters.Add( new HandleErrorAttribute() ); filters.Add( new LogFilterAttribute() ); } ... protected void Application_Start() { ... RegisterGlobalFilters( GlobalFilters.Filters ); // NOTE hack: var kernel = NinjectMVC3.GetKernel(); var logger = kernel.Get<ILogger>(); var bw = new BackgroundWork(logger); Application["BackgroundWork"] = bw; bw.Start(); } } 有两个我感兴趣的接口:第一个是将一个对象绑定到一个Global变量(Backgroundog的ILogger)。 第二个是ActionFilter。我读了http://www.planetgeek.ch/2010/11/13/official-ninject-mvc-extension-gets-support-for-mvc3/,但我看不到它如何插入实际的注册(filter.Add)。 我不想使用属性注入,如果我可以避免它。 对这样做的正确方法有什么想法? 解决方法
MVC 3引入了DependencyResolver,它被填充到单例中,Ninject扩展支持它。如果需要,您可以在MvcApplication类中使用它:
protected void Application_Start() { // ... var logger = DependencyResolver.Current.GetService<ILogger>(); } 现在我应该指出,没有必要用动作过滤器来做到这一点。在Ninject.MVC3中,您应该使用BindFilter语法,如下所示: // Declare empty attribute public class MyFilterAttribute : FilterAttribute { } // Dependency module public class MyModule : NinjectModule { public override void Load() { // Other bindings // ... this.BindFilter<MyActionFilter>(FilterScope.Action,1) .WhenControllerHas<MyFilterAttribute>(); } } 请注意,您必须使用此功能,因为BindFilter是一种扩展方法,并且还必须引用Ninject.Web.Mvc.FilterBindingSyntax命名空间。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET Handler(ashx)vs MVC Controller Action用于下载文
- asp.net – 无法为自定义MembershipProvider创建Membership
- asp.net-mvc – 如何使用ASP.NET身份(OWIN)访问Facebook的私
- asp.net-mvc – 使用actionlink将文本框的值从视图传递到控
- asp.net-mvc-3 – ASP.NET MVC 3.0 Razor,从任何地方开始加
- asp.net-mvc-3 – 如何确保Asp.net MVC项目中不同控制器之间
- asp.net-core – 在将Swashbuckle用于网络核心web api项目时
- asp.net-mvc-3 – 在MVC3中对Webgrid行进行内联编辑
- 如何在ASP.NET MVC 4和jquery中使用web api下载文件
- asp.net-mvc-3 – MVC3:不将属性映射到DB列的属性