asp.net-mvc-3 – 使用Ninject 2.2全局动作过滤器的MVC 3依赖注入
发布时间:2020-05-24 12:35:33 所属栏目:asp.Net 来源:互联网
导读:我正在尝试使用ASP.NET MVC 3和Ninject 2.2将logger对象注入自定义ActionFilterAttribute. 如果我使用自定义属性标记每个控制器,我能够使其工作. 但是,如果我从控制器中删除属性修饰并尝试使用全局操作过滤器,则无法使其工作. 这是代码: 在App_Start下 – Ni
|
我正在尝试使用ASP.NET MVC 3和Ninject 2.2将logger对象注入自定义ActionFilterAttribute. 如果我使用自定义属性标记每个控制器,我能够使其工作. 但是,如果我从控制器中删除属性修饰并尝试使用全局操作过滤器,则无法使其工作. 这是代码: 在App_Start下 – NinjectMVC3.cs using NinjectTest.Abstract;
using NinjectTest.Concrete;
[assembly: WebActivator.PreApplicationStartMethod(typeof(NinjectTest.App_Start.NinjectMVC3),"Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(NinjectTest.App_Start.NinjectMVC3),"Stop")]
namespace NinjectTest.App_Start
{
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Mvc;
public static class NinjectMVC3
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
/// <summary>
/// Starts the application
/// </summary>
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
bootstrapper.Initialize(CreateKernel);
}
/// <summary>
/// Stops the application.
/// </summary>
public static void Stop()
{
bootstrapper.ShutDown();
}
/// <summary>
/// Creates the kernel that will manage your application.
/// </summary>
/// <returns>The created kernel.</returns>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
RegisterServices(kernel);
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ILogger>().To<Log4NetLogger>();
}
}
} 的Global.asax.cs using System.Web.Routing;
using NinjectTest.Attributes;
namespace NinjectTest
{
public class MvcApplication : HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new TestLoggingAttribute());
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",// Route name
"{controller}/{action}/{id}",// URL with parameters
new { controller = "Home",action = "Index",id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
log4net.Config.XmlConfigurator.Configure();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
} TestLoggingAttribute.cs using System.Web.Mvc;
using Ninject;
using NinjectTest.Abstract;
namespace NinjectTest.Attributes
{
public class TestLoggingAttribute : ActionFilterAttribute
{
[Inject]
public ILogger _logger { get; set; }
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var controller = filterContext.RouteData.Values["controller"];
var action = filterContext.RouteData.Values["action"];
_logger.Info("controller: " + controller + " action: " + action);
base.OnActionExecuted(filterContext);
}
}
}
HomeController.cs using System.Web.Mvc;
using NinjectTest.Attributes;
namespace NinjectTest.Controllers
{
//[TestLogging]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
}
}
就像我提到的,如果我取消注释控制器中的[TestLogging]属性,这一切都有效.但是,我想使用全局过滤器. 解决方法您可能会发现 following blog post很有用.所以在您的RegisterServices方法中只需:private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ILogger>().To<Log4NetLogger>();
kernel.BindFilter<TestLoggingAttribute>(FilterScope.Global,0);
}
并将BindFilter扩展方法纳入范围,不要忘记添加正确的using指令: using Ninject.Web.Mvc.FilterBindingSyntax; (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-5 – 如何在服务器上保存Rotativa PDF
- asp.net – 如何在HTML标记中阅读web.config APP键设置
- 在ASP.NET中使用JQuery选择ID属性
- iis-7.5 – IIS 7.5 Siteminder不保护ASP.net MVC请求
- asp.net-mvc – 输出字符串里的字符串文字引用
- asp.net – ConfigurationManager.AppSettings缓存
- 当将单字节添加到响应中时,ASP.NET WebAPI输出的速度会降低
- asp.net – SCRIPT5022:Sys.WebForms.PageRequestManagerS
- asp.net-mvc – ASP.NET MVC3 – 3层设计 – 事务控制和业务
- asp.net-mvc – webgrid中的Mvc 3 texbox(razor)
推荐文章
站长推荐
- ASP.NET web.config文件是否失控?
- 锁定ASP .Net自定义成员资格提供程序中的用户
- asp.net-mvc-2 – 使用’class(或其他保留关键字
- asp.net-mvc – Angular ng-include cshtml页面
- asp.net-mvc-3 – ASP.NET成员资格 – 本地登录,
- asp.net-mvc-3 – ASP.NET MVC 3本地化验证消息在
- asp.net-mvc – Ninject.Extensions.Logging.nlo
- asp.net – 如何和在哪里调用Database.EnsureCre
- asp.net – Visual Studio开发服务器不更新css和
- asp.net-mvc – asp.mvc视图在发布配置中引用#IF
热点阅读
