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 – 在打开silverlight项目之前,您需要安装最新的Si
- asp.net – 如何冻结GridView标题?
- asp.net-mvc – asp.net MVC中RavenDB中的多租户索引
- 如何在ASP.Net webform中使用标签?
- 在Asp.Net Membership中手动更改用户名
- asp.net-mvc – ASP.NET MVC – CustomeAuthorize使用外部网
- asp.net’记住我’不再使用表单身份验证了
- asp.net-mvc – Html.BeginForm()与GET方法
- asp.net-membership – 成员资格超时和会话超时
- asp.net-mvc – 在MVC SignalR服务器和Windows服务SIgnalR客
- asp.net-mvc-3 – 用于ASP.NET MVC的Razor View
- ASP.NET MVC:OutputCache的问题
- asp.net-mvc – MVC3如何禁用/启用ActionLink
- asp.net-core – ASP.NET Core中的System.Data.E
- asp.net-mvc-3 – 具有MVC属性的IoC / DI
- asp.net-mvc – 无法使用IIS Express在Windows 1
- asp.net-mvc – 在ASP.NET MVC中的LinkButton
- 数组 – 发布字符串数组
- asp.net-mvc-3 – 如何关闭我的整个ASP.NET MVC
- asp.net-mvc – 添加一个默认的SelectListItem
