【问题标题】:Dependency Injection into a AuthorizationFilterAttribute依赖注入到 AuthorizationFilterAttribute
【发布时间】:2012-04-05 18:11:36
【问题描述】:

总的来说,我对 Unity 和 IoC 还是很陌生,而且像往常一样,我很快就陷入了困境……

我为 ASP.NET Web API Beta 创建了一个授权过滤器属性。我现在需要将我的授权人注入到属性中,但是由于这是一个属性,我不能简单地在构造函数中执行此public TestAuthAttribute(IAuthorizer Authorizer)

然后我决定创建一个用 [Dependency] 属性装饰的公共属性以进行属性注入,但是它没有得到解决。

代码如下:

public class TestAuthAttribute : AuthorizationFilterAttribute
{
    [Dependency]
    public IAuthorizer Authorizer { get; set; }

    public TestAuthAttribute() {
        ...
        }

    private bool authorizeCore(HttpRequestMessage request)
    {
        if (Authorizer == null)
            throw Error.ArgumentNull("Null Authorizer");  // <<<<< this is null
    }

当控制器用[TestAuth]修饰时触发Attribute但Authorizer未解析,为null)

我已将以下代码放在我的控制器中,授权器确实得到了解决...

[Dependency]
    public IAuthorizer Authorizer { get; set; }

为什么我的 AuthorizationFilterAttribute 没有解决这个依赖关系?你将如何将授权者注入到 AuthorizationFilterAttribute 中?

【问题讨论】:

    标签: asp.net asp.net-mvc-3 unity-container


    【解决方案1】:

    完全披露:我没有使用过 Turbine。

    话虽如此,我认为它可能会为您解决问题,或者至少向您展示如何解决它。

    他们在这里有一个 Unity Nuget 包:http://nuget.org/packages/MvcTurbine.Unity

    您可以在他们的 codeplex 网站上找到更多详细信息:http://mvcturbine.codeplex.com/

    希望对您有所帮助。

    【讨论】:

    • 感谢您的回复。因此,作为 IoC 的新手,我从链接推断 MVC 正在实例化 FilterAttribute,因此永远不会发生依赖注入。这基本上是正在发生的事情吗?
    • @TimBhd 对。除非您明确地将它连接到您的容器,否则 MVC 不知道您正在尝试使用 Unity。另见这篇文章:stackoverflow.com/questions/1035611/…。如果您不想依赖 Turbine,我认为这是一个更直接的解决方案。
    • @TimBhd 另见 Jimmy Bogard 的帖子:lostechies.com/jimmybogard/2010/05/03/…
    • 感谢您的信息和链接。最后一个对我来说是一个新的,并有所启发。我回去并使用自定义过滤器属性提供程序再试一次,就像这里的:link。该解决方案适用于典型的 MVC,但对于 Beta ASP.net Web API,提供程序永远不会触发。我猜我需要在 Web API 中找到一些相应的过滤器属性提供程序。
    • @TimBhd 这可能是 Beta 版的问题,将在即将到来的 RC 中解决。我不相信他们应该在与 MVC 合并后表现不同。我建议在 Web API 论坛上发布您的问题(实际上是链接这篇文章)。社区(包括 Microsoft)非常活跃,您可以在那里更好地了解此类问题。论坛在这里:forums.asp.net/1246.aspx/1?ASP+NET+Web+API。希望对您有所帮助。
    【解决方案2】:

    我将 Ninject 用于类似目的。我确实参考了 Ninject.Web.WebAPI,它运行良好。

    但是,这似乎不适用于 MVC4 RC。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2014-06-12
      • 2013-04-30
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多