8

コードのどこかでインスタンスを解決する方法を見つけようとしています。

アプリケーションの起動時にタイプを登録しました

static void Main()
{    
    var builder = new ContainerBuilder();
    builder.RegisterType<Foo>().As<IFoo>();
}

では、コードのどこかでインスタンスを解決するにはどうすればよいでしょうか?

StructureMAPには静的オブジェクトがありますObjectFactory.GetInstance<IFoo>()

4

1 に答える 1

13

はじめに を読んでください。それはあなたを始めるはずです。

まず、探しているのはcontainer. ContainerBuilderこの単純な WinForms アプリのようなものからビルドします。

static void Main()
{
    using (var container = builder.Build())
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var mainForm = container.Resolve<MainForm>();
        Application.Run(mainForm)
    }
}

一般的な考え方は、最初または最上位のインスタンスのみを解決する必要があるということです。コンテナーは、コンストラクター パラメーターを介した依存関係の挿入に基づいて、他のすべてのインスタンスの作成を処理します。

アプリケーション全体で DI パターンに従っていれば、起動時に一度だけコンテナに触れる必要があります。

最上位のインスタンスを解決する方法は、構築しているアプリケーションのタイプによって大きく異なります。Web アプリの場合は、ASP.Net 統合MVC 統合によって処理されます。(結局のところ、ASP.Net の最上位のインスタンスはApplication、制御できないものです)。

一方、コンソール アプリまたは WinForms アプリの場合はMain、上記のサンプルのように で最初のインスタンスを手動で解決します。

于 2010-04-29T13:01:36.870 に答える