2

Spring.Net ASP.Net MVC コントローラー依存性注入を行うために MvcContrib を使用しています。依存関係が CustomAttribute アクション フィルターに挿入されていません。依存関係をそこに入れるにはどうすればよいですか?

次のような ActionFilter があるとします。

public class CustomAttribute : ActionFilterAttribute, ICustomAttribute
{
    private IAwesomeService awesomeService;

    public CustomAttribute(){}

    public CustomAttribute(IAwesomeService awesomeService)
    {
          this.awesomeService= awesomeService;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
         //Do some work
    }
}

Spring.Net 構成セクションは次のようになります。

<object id="CustomAttribute " type="Assembly.CustomAttribute , Assembly" singleton="false">
    <constructor-arg ref="AwesomeService"/>
</object>

そして、次のように属性を使用します。

[Custom]
public FooController : Controller
{
    //Do some work
}
4

1 に答える 1

1

ここで難しいのは、ActionFilter がリクエストごとに、Spring が認識していないコンテキストで新しくインスタンス化されるように見えることです。ActionFilter コンストラクターで Spring の「ContextRegistry」クラスを使用して、同じ状況を処理しました。残念ながら、Spring 固有の API の使用がコードに導入されます。これは、可能であれば回避することをお勧めします。

私のコンストラクタは次のようになります。

public MyAttribute()
{
    CustomHelper = ContextRegistry.GetContext().GetObject("CustomHelper") as IConfigHelper;
}

複数の Spring コンテキストをロードする場合は、GetContext(...) メソッドで必要なコンテキストを指定する必要があることに注意してください。

于 2009-12-23T23:35:54.387 に答える