gpt4 book ai didi

asp.net-mvc - MVC/Unity - 如何将依赖项注入(inject)自定义 FilterAttributes?

转载 作者:行者123 更新时间:2023-12-04 12:38:36 26 4
gpt4 key购买 nike

我有一个定制HandleErrorAttribute扩展 FilterAttribute .

如何让 Unity 在注入(inject) Controller 依赖项本身的同时将依赖项注入(inject)此属性?

最佳答案

好的,想通了。

大多数情况下,我从他指出的博客文章中使用了 Ben 在上面的解决方案。

问题是 Unity 的行为有点不同。

您不能直接在过滤器上注入(inject)依赖项,因为它们分别属于 IActionFilter 和 IExceptionFilter 类型。这让我相信它们是只读的,但事实并非如此。只是 Unity 需要知道显式类型才能注入(inject)。

因此,在文章提供的重写方法中,Unity 用户需要查询过滤器的相关类型,然后构建它们。

public UnityActionInvoker(IUnityContainer container, IList<Type> typesToInject)
{
_container = container;
_typesToInject = typesToInject;
}

然后在覆盖的方法中,执行以下操作:
  var needsInjection = filters.Where(filter => typesToInject.Contains(filter.GetType()));

有点困惑,但它只需要完成一次,并且按照 Ben 的建议保持一切解耦。

另一个问题是您不能在 foreach 循环中调用 _container.BuildUp(filter) ,因为过滤器在该上下文中是只读的。

关于asp.net-mvc - MVC/Unity - 如何将依赖项注入(inject)自定义 FilterAttributes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1035611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com