2015-05-05 52 views
1

我有這個DDD應用程序,在演示上,與Ninject MVC。ASP.NET MVC 5篩選器和Ninject

我有CrossCutting Layer綁定來自所有圖層的注入,它像一個魅力。

什麼我不能做的工作,是當涉及到過濾器屬性。我有這個篩選器檢查一個cookie,並根據它的值,在數據庫上執行查詢。有了這個架構,我不能讓我的過濾器直接訪問我的知識庫,這將不尊重我應用的方法。

我有我的IFooAppService接口,並有它的方法,最終會擊中數據庫的請求。我可以成功地將它注入到任何Controller構造函數中,並且它會執行我的_fooAppService.Query(),但是我的應用程序中的某些動作上面有這個XooFilter,並且我無法將_fooAppService傳遞給它。這裏是我的XooFilter:

public class XooFilter : ActionFilterAttribute 
{ 
    private readonly IFooAppService _fooAppService; 

    public XooFilter(IFooAppService fooAppService) 
    { 
     _fooAppService = fooAppService; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // LOGIC... 

     var fooValue = _fooAppService.Query(); 

     // MORE LOGIC.. 
    } 
} 

但是,當我插入我的過濾器上方的任何動作[XooFilter],它不會工作。它說過濾器沒有0元素的構造函數。

我只是不知道如何很好地做到這一點,並保持DDD和IoC的特點。我發現下面的文章,但找不到任何答案:

Injecting dependencies into ASP.NET MVC 3 action filters. What's wrong with this approach?

+0

[不依賴注入到你的屬性(HTTPS:/ /www.cuttingedge.it/blogs/steven/pivot/entry.php?id=98)。期!使你的[屬性被動](http://blog.ploeh.dk/2014/06/13/passive-attributes/),或使你的屬性[謙卑的對象](http://xunitpatterns.com/Humble%20Object .html)描述[這裏](https://stackoverflow.com/questions/29915192/unity-property-injection-on-authorizeattribute/29916075#29916075)。 – Steven

+0

那我該怎麼做?每次調用這些過濾器時,都需要訪問數據庫。編輯:我很新,IoC和DI好友,但我有基本知識。 –

+0

閱讀引用文章並回答後,您將獲得足夠的信息,以便就如何解決問題做出明智的決定。 – Steven

回答

0

你可以解決您的服務這樣

System.Web.Mvc.DependencyResolver.Current.GetService(typeof (IFooAppService)); 
+0

這不是一種資源友好的方法。 –