Bla*_*ell 7 c# unity-container asp.net-web-api
参考此CodePlex统一文章,我能够使用WebAPI控制器获取过滤器属性,如下所示:
[MyFilterAttribute]
public class TestController : ApiController
{}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想在使用GlobalConfiguration的所有操作中应用我的filter属性,它将被剥离注入的依赖项:
public class MyFilterAttribute : ActionFilterAttribute
{
[Dependency]
public MyDependency { get; set; }
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (this.MyDependency == null) //ALWAYS NULL ON GLOBAL CONFIGURATIONS
throw new Exception();
}
}
public static class UnityWebApiActivator
{
public static void Start()
{
var resolver = new UnityDependencyResolver(UnityConfig.GetConfiguredContainer());
GlobalConfiguration.Configuration.DependencyResolver = resolver;
GlobalConfiguration.Configuration.Filters.Add(new MyFilterAttribute());
RegisterFilterProviders();
}
private static void RegisterFilterProviders()
{
var providers =
GlobalConfiguration.Configuration.Services.GetFilterProviders().ToList();
GlobalConfiguration.Configuration.Services.Add(
typeof(System.Web.Http.Filters.IFilterProvider),
new UnityActionFilterProvider(UnityConfig.GetConfiguredContainer()));
var defaultprovider = providers.First(p => p is ActionDescriptorFilterProvider);
GlobalConfiguration.Configuration.Services.Remove(
typeof(System.Web.Http.Filters.IFilterProvider),
defaultprovider);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的地方添加全局配置?
Nic*_*oiu 14
之所以出现此问题是因为您要将新的MyFilterAttribute添加到filters集合(即:),GlobalConfiguration.Configuration.Filters.Add(**new MyFilterAttribute()**)
而不是通过Unity解析的实例.由于Unity不参与实例的创建,因此它没有用于注入依赖项的触发器.只需通过Unity解析实例就可以解决这个问题.例如:
GlobalConfiguration.Configuration.Filters.Add((MyFilterAttribute)resolver.GetService(typeof(MyFilterAttribute()));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5031 次 |
最近记录: |