看过如何
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手动注入该属性。
用法:
[MyFilter(typeof运算(IMyFilterService))]
您的实际过滤器将在一个实现IMyFilterService的类中,而后者又应该实现IFilterService,可以看起来像这样:
public interface IFilterService { void ActionExecuting(ActionExecutingContext c); void ActionExecuted(ActionExecutedContext c); }
这样你的过滤器甚至不会被绑定到ASP.NET MVC,你的属性只是一个元数据 – 它实际上应该是这样的!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。