15

在我的ASP.Net MVC應用程序中,我實現了一個自定義ActionFilter來授權用戶。使用Castle Windsor向CustomAttribute注入依賴項

我用CastleWindsor提供依賴注入到所有控制器如下:

protected virtual IWindsorContainer InitializeServiceLocator() 
    { 
     IWindsorContainer container = new WindsorContainer(); 
     ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container)); 

     container.RegisterControllers(typeof(HomeController).Assembly); 
     ComponentRegistrar.AddComponentsTo(container); 

     ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container)); 

     return container; 
    } 

在我的CustomAttribute,我需要被所有我控制器的依賴,但我無法對用戶構造基於注入的屬性。

那麼這裏最乾淨的方法是什麼?我如何提供依賴關係?

+7

不要把行爲放在屬性中...... – 2011-05-25 18:25:19

+0

可能重複[如何使用Windsor向ActionFilterAttributes注入依賴項](http://stackoverflow.com/questions/553330/how-do-i-use- windsor-injection-dependencies-into-actionfilterattributes) – BonyT 2011-05-31 09:54:56

+0

恕我直言,最好的答案在這裏http://stackoverflow.com/questions/10708565/asp-net-mvc-ifilterprovider-and-separation-of-concerns(和在這個問題本身 - 非常好的例子(提示:'IFilterProvider'))。 – 2013-11-17 16:42:50

回答

1

你不能。屬性是元數據。將行爲置於其中是錯誤的。把依賴關係更糟。

使用您的屬性作爲標記來表示您要應用該行爲並在其他位置實施行爲的對象。

在其他地方的MVC 通常意味着使用來自屬性的數據提供您需要的行爲的自定義操作調用程序。

+2

好吧 - 請解釋我在做什麼和本文之間的區別:http://www.asp.net/mvc/tutorials/understanding-action-filters-vb – BonyT 2011-05-26 08:43:35

+18

此外 - 此答案提供批評而沒有真正給予任何形式解決方案......「其他地方?」請具體說明。你將如何實現適用於許多控制器的整個應用程序的授權,並且需要依賴性? – BonyT 2011-05-26 08:52:20

+0

我不得不用大量的胖子來推翻downvote。一張圖片說了超過一千個字。 – Steven 2011-05-26 09:35:04

相關問題