大佬教程收集整理的这篇文章主要介绍了asp.net-mvc-3 – 在Application_Start中访问ninject内核,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我最终使用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)。
我不想使用属性注入,如果我可以避免它。
对这样做的正确方法有什么想法?
谢谢
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-mvc-3 – 在Application_Start中访问ninject内核全部内容,希望文章能够帮你解决asp.net-mvc-3 – 在Application_Start中访问ninject内核所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。