2009-12-02 76 views
2

我使用MvcContrib來完成我的Spring.Net ASP.Net MVC控制器依賴注入。 我的依賴不會被注入到我的CustomAttribute操作過濾器中。 如何獲得我的依賴關係?使用Spring.Net將依賴關係注入到ASP.NET MVC ActionFilters

假設你有一個看起來像這樣一個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 
} 

回答

1

這裏最棘手的部分是ActionFilters似乎被實例化爲新的每個請求並且在Spring所知的範圍之外。我在ActionFilter構造函數中使用Spring「ContextRegistry」類處理了相同的情況。不幸的是,它將Spring特定的API用法引入到您的代碼中,如果可能的話,這是一個很好的做法。

這裏是我的構造是什麼樣子:

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

請記住,如果要加載多個Spring上下文的,你需要指定你在的getContext(...)方法想要的內容。

+0

這是我能夠做到這一點的唯一方法,因爲大多數注入方案都是從控制器開始的。您可以在MVC中將默認的DependencyResolver設置爲使用基於您需要實現的Spring。這將使Spring特定的代碼保持您的屬性之外。 – Pharcyde 2012-02-14 18:05:31

相關問題