3

ASP MVC プロジェクトで LightInject を使用しています。初期化コードは、 http ://www.lightinject.net/#mvc とほぼ同じです。

私の質問は、HTML ヘルパーなどの静的関数のインスタンスを解決する方法です。

public static string MyHtmlExtension(this HtmlHelper h)
{
  var myService = new MyService(); // <- get this from container instead of creating new object
  return myService.DoSomething(h);
}

ServiceContainerクラス内を静的にすることはできますかMvcApplication、それとも悪い習慣ですか?

4

1 に答える 1

3

ほとんどの場合、アプリケーション ドメインごとに 1 つのコンテナー インスタンスしか存在しないため、コンテナーをシングルトン (静的) にすることができます。そうは言っても、拡張メソッド内からコンテナーにアクセスすることはお勧めしません。ここで基本的に行っているのは、アンチパターンと見なされるサービス ロケーター パターンです。コンポジション ルート (アプリケーションの起動) でのみコンテナーを参照するように、コードを整理してみてください。したがって、この場合、コンテナーを使用せずに拡張メソッドを作成することを検討するか、HtmlHelper を必要とするクラスに HtmlHelper を挿入することができます。

よろしく Bernhard Richter (LightInject の作成者)

于 2014-11-16T10:23:21.807 に答える