4

Windows フォーム アプリケーションで Unity DI を使用しています。これまでのところ、次のように program.cs のメイン フォームへの依存関係を解決しています。

    static void Main()
{
    IUnityContainer container = new UnityContainer();
    container.AddNewExtensionIfNotPresent<EnterpriseLibraryCoreExtension>();
    container.RegisterType<IAccountService, AccountService>();
    container.RegisterType<IAccountRepository, AccountRepository>();

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(container.Resolve <MainForm>());
}

私の問題は、MainForm が子フォームを作成しようとしたときです。

    ChildForm childForm = new ChildForm();
    childForm.Show();

コンストラクター インジェクションを使用しようとしていて、コンストラクター引数を渡していないため、エラーが発生します。[Dependency] 属性でセッター注入も試しましたが、それもうまくいきませんでした。どうすればこれを達成できますか? メイン フォームにすべての依存関係を持たせ、必要なオブジェクトを子フォームに渡すこともできますが、多くの子フォームを作成すると、メイン フォームが乱雑になります。

4

2 に答える 2

3

Unity がコンストラクター引数を挿入するには、コンテナーを使用して子フォームを解決する必要があります。したがって、コンテナへの参照をどこかに保持してから、次を呼び出す必要があります。

ChildForm childForm = container.Resolve<ChildForm>();

これにより、Unity は ChildForm コンストラクターを評価し、適切な依存関係を注入できるようになります。

于 2013-01-31T20:48:56.333 に答える