Mvc 3/Unity 2 将依赖项注入过滤器? [英] Mvc 3/Unity 2 inject dependencies into a Filter?
问题描述
如何注入以下依赖项??
How can i inject the following dependencies ??
public class Authenticate : AuthorizeAttribute
{
[Dependency]
public IAuthenticate AuthenticateLibrary { get; set; }
[Dependency]
public ILibrary BaseLibrary { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
}
}
我使用 Unity 2 注入所有控制器.是否有 Unity 2 和将依赖项注入过滤器的教程?
I am using Unity 2 to inject all the controllers. Is there a tutorial for Unity 2 and injecting dependencies into filters?
推荐答案
Brad Wilson 有一个关于 Service Location 的很好的系列,其中包括如何创建您自己的可以支持依赖注入的过滤器提供程序:http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html(向下滚动到向过滤器添加依赖注入"部分).
Brad Wilson has a good series on Service Location which includes how to create your own filter provider that can support dependency injection: http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html (Scroll down to the section "Adding Dependency Injection to Filters").
- 复制他为 UnityFilterAttributeFilterProvider.cs 提供的代码.
UnitFilterAttributeFilterProvider.cs
using System.Collections.Generic;
using System.Web.Mvc;
using Microsoft.Practices.Unity;
public class UnityFilterAttributeFilterProvider : FilterAttributeFilterProvider {
private IUnityContainer _container;
public UnityFilterAttributeFilterProvider(IUnityContainer container) {
_container = container;
}
protected override IEnumerable<FilterAttribute> GetControllerAttributes(
ControllerContext controllerContext,
ActionDescriptor actionDescriptor) {
var attributes = base.GetControllerAttributes(controllerContext,
actionDescriptor);
foreach (var attribute in attributes) {
_container.BuildUp(attribute.GetType(), attribute);
}
return attributes;
}
protected override IEnumerable<FilterAttribute> GetActionAttributes(
ControllerContext controllerContext,
ActionDescriptor actionDescriptor) {
var attributes = base.GetActionAttributes(controllerContext,
actionDescriptor);
foreach (var attribute in attributes) {
_container.BuildUp(attribute.GetType(), attribute);
}
return attributes;
}
}
- 修改 global.asax.cs 的 Application_Start,使 UnityFilterAttributeFilterProvider 成为您的 MVC 应用的过滤器提供程序.
.
protected void Application_Start() {
// ...
var oldProvider = FilterProviders.Providers.Single(
f => f is FilterAttributeFilterProvider
);
FilterProviders.Providers.Remove(oldProvider);
var container = new UnityContainer();
var provider = new UnityFilterAttributeFilterProvider(container);
FilterProviders.Providers.Add(provider);
// ...
}
- 使用 [Dependency] 属性装饰您希望 Unity 为其注入值的属性.然后你就可以出发了.
这篇关于Mvc 3/Unity 2 将依赖项注入过滤器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!