これに対する回答(または代替)を探しています。静的メソッドでの自動入力解像度
いくつかの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開発の一部であり、強力な機能です。カスタム拡張メソッドの中にビジネスロジックコンポーネント(サービス)が必要であると仮定するのは遠くない。
これに関するご意見はありますか?
これは、私の開発者の間で多くの技術的な議論が行われています。これが、私たちが使ってきた大規模な大会をどのように発掘したかは、喜んでいます。しかし、私は答えのために@Travisに感謝します。私は他の場所でそれを使用することができました。 – JDBennett