1

我认为我的问题是一个很长的问题。

假设我有一个属性:

public sealed class MyCustomAttribute: ActionFilterAttribute

用于类方法

    [MyCustomAttribute]
    public virtual ActionResult Options(FormCollection collection)

现在,我需要添加一个构造函数的参数

    public MyCustomAttribute(IMyDependentObject dependentObject)
    {           
              (...)
    }

(您可能注意到这是一些 Asp.NET MCV 代码)

我想使用 DI 来创建这个属性。Asp.NET MVC 代码自动创建它,我不知道如何/在哪里可以编写代码来使用 Castle 。

有任何想法吗?

4

1 回答 1

2

据我所知,城堡不支持注入现有对象,这使得无法注入属性,因为它们的构造不受您的控制。其他 IoC 容器(例如 Ninject)支持现有对象的注入。它们注入属性过滤器的属性。请参阅http://github.com/ninject/ninject.web.mvc以获得完全满足您需要的扩展。


如果您想留在城堡中,您可以做的是将您自己的从 ControllerActionInvoker 派生的 ControllerActionInvoker(在异步控制器的情况下为 AsyncControllerActionInvoker)注入所有控制器。在您自己的调用程序中,您覆盖 GetFilters。除了基础返回的过滤器之外,您还添加了由城堡创建的过滤器信息。

可以通过各种策略来决定创建和添加哪些过滤器信息,例如:

  • 添加一个包含信息的自定义属性,例如绑定的名称
  • 配置文件/数据库

您是否可以考虑切换到 MVC3,这会使一切变得容易一些。因为您可以注册自己的 FilterProvider,这让一切变得更加容易。在此 FilterProvider 中,您必须决定要添加哪些过滤器信息。再看上面的两种策略。有关 MVC3 和过滤器的信息,请参阅http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html

于 2010-10-29T21:55:17.847 回答