コンソールアプリケーションのIOCですか?
-
08-07-2019 - |
質問
IOCをコンソールアプリケーションに導入するための優れたソリューションは誰でも考えられますか?
現時点では、次のメソッドで静的クラスを使用しています。
public static T Resolve<T>()
{
return dependencyResolver.Resolve<T>();
}
この体験をシームレスにしたいのですが、コンソールアプリケーションからこれを実現する方法は考えられません。
解決
どこかでサービスロケータ呼び出し(Resolve<T>()
)を行う必要があります。秘Theは、できる限りその場から離れることです。コンソールアプリケーションの場合、このブートストラップはMain()
メソッドで発生します。そこで実行し、他の場所でこれらのResolve呼び出しを最小限に抑えると、すばらしい結果が得られます。ほとんどの依存関係では、コンストラクター注入を使用します。
他のヒント
コンソールアプリケーションには、IoCのWebまたはフォームアプリケーションに対する制限はありません。任意の選択肢(Spring、Ninject、Unityなど)を使用できます。それらのほとんどは、コンソールアプリケーションの外部のXMLファイルで構成可能であり、Ninjectorのようなものはアプリケーション内で構成が必要です。
Spring.NETをコンソールアプリから問題なく使用しました。設定ファイルを指定するだけで、すべての依存関係がフックされます。もちろん、これらのオブジェクトを使用して 行うことは、コンソールアプリが何をしようとしているかによって異なります。
Microsoft Unity をチェックアウトします。
所属していません StackOverflow