2016-04-29 1 views
0

これに対する回答(または代替)を探しています。静的メソッドでの自動入力解像度

いくつかのDIを使用するために私たちのコアアプリケーションの1つをリファクタリングしています。選択の武器はオートファックです。私は、この拡張メソッドにつまずいまで

すべてがうねりを予定されています:

public static bool ActionAuthorized(this HtmlHelper htmlHelper, string actionName, string controllerName) 
    { 


     IRouteService _routeService; //<---------How do I get the instance here? 


     Models.Routing.Routes thisRoute = _routeService.GetRoutes().FirstOrDefault(x => x.Action == actionName && x.Controller == controllerName); 

     ///removed for brevity.... 

     return false; 
    } 

この拡張は、(などのリンクを表示し、リンクを非表示)アプリケーションの部分を固定するために使用されます。

幸いなことに、拡張機能は1つのビュー(_shared)でのみ使用されますが、レイアウトビューであるため、すべてがヒットします。

私はこのようList<Routes>注入する署名をリファクタリング考えた:これはシンプルになるだろう

public static bool ActionAuthorized(this HtmlHelper htmlHelper, string actionName, string controllerName, List<Routes> routes) 

を:

Models.Routing.Routes thisRoute = routes.FirstOrDefault(x => x.Action == actionName && x.Controller == controllerName); 

しかし、私は、これは部分的(_shared)図で言ったように。

私は本当にしたくない署名のルートを含むようにすべてのViewModelを変更する必要があります。

基本的な問題はDIであり、静的クラスは悪いju juです....私はそれを取得します。しかし、拡張メソッドは、.NET開発の一部であり、強力な機能です。カスタム拡張メソッドの中にビジネスロジックコンポーネント(サービス)が必要であると仮定するのは遠くない。

これに関するご意見はありますか?

答えて

3

静的についている場合、答えは「サービスの場所」です。それはかなりではありませんが、それはそれです。

MVCを使用しているようですが、これはDependencyResolver.Current.GetService()を意味します。

+0

これは、私の開発者の間で多くの技術的な議論が行われています。これが、私たちが使ってきた大規模な大会をどのように発掘したかは、喜んでいます。しかし、私は答えのために@Travisに感謝します。私は他の場所でそれを使用することができました。 – JDBennett

関連する問題