asp.net-mvc – 如何使用Windsor将依赖项注入到ActionFilterAttributes中
发布时间:2020-05-23 16:45:23 所属栏目:asp.Net 来源:互联网
导读:看过如何 NInject can do it和 AutoFac can do it我试图找出如何注入依赖项到MVC ActionFilters使用城堡温莎 目前,我正在使用一个丑陋的静态IoC帮助器类来解析构造函数代码的依赖关系,如下所示: public class MyFilterAttribute : ActionFilterAttribute{
|
看过如何 NInject can do it和 AutoFac can do it我试图找出如何注入依赖项到MVC ActionFilters使用城堡温莎 目前,我正在使用一个丑陋的静态IoC帮助器类来解析构造函数代码的依赖关系,如下所示: public class MyFilterAttribute : ActionFilterAttribute
{
private readonly IUserRepository _userRepository;
public MyFilterAttribute() : this(IoC.Resolve<IUserRepository>()) { }
public MyFilterAttribute(IUserRepository userRepository)
{
_userRepository = userRepository;
}
}
我想从我的过滤器中删除静态反模式IoC的东西。 有什么提示,我将如何去与温莎城堡一起去做? 不,改变DI框架不是一个选择。 解决方法创建一个通用属性:MyFilterAttribute,其中ctor采用Type作为参数 – 即这样:public class MyFilterAttribute : ActionFilterAttribute {
public MyFilterAttribute(Type serviceType) {
this.serviceType = serviceType;
}
public override void OnActionExecuting(FilterExecutingContext c) {
Container.Resolve<IFilterService>(serviceType).OnActionExecuting(c);
// alternatively swap c with some context defined by you
}
// (...) action executed implemented analogously
public Type ServiceType { get { return serviceType; } }
public IWindsorContainer Container { set; get; }
}
然后使用与您所指的两个文章相同的方法,以便控制如何调用操作,并将WindsorContainer手动注入该属性。 用法: 您的实际过滤器将在一个实现IMyFilterService的类中,而后者又应该实现IFilterService,可以看起来像这样: public interface IFilterService {
void ActionExecuting(ActionExecutingContext c);
void ActionExecuted(ActionExecutedContext c);
}
这样你的过滤器甚至不会被绑定到ASP.NET MVC,你的属性只是一个元数据 – 它实际上应该是这样的! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET MVC中%:和%=有什么区别?
- ASP.NET MVC与WebForms:速度和架构比较
- asp.net-mvc – ASP.NET MVC Ajax.BeginForm不起作用
- ASP.Net自定义会话状态管理
- 动态渲染asp:从ASP.NET中的BLOB条目的图像
- asp.net-mvc-4 – 简单会员:用户的上次登录日期
- asp.net-mvc-2 – Html.TextBoxFor格式和css类
- asp.net-mvc – 如何锁定ASP.NET MVC中的路径?
- asp.net-mvc-3 – 从MVC 3中使用Razor View引擎的局部视图渲
- asp.net – TransactionScope是否需要DTC服务?
推荐文章
站长推荐
热点阅读
