Unity DI コンテナーは、最初は Windows フォーム アプリケーションで動作しています。私はProgram.cs
次のものを持っています:
static void Main()
{
var container = BuildUnityContainer();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(container.Resolve<MainForm>());
}
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<ITest, MyTestClass>();
container.RegisterType<ISomeOtherTest, MyOtherClass>();
return container;
}
私のMainForm
コンストラクターには、次の機能があります。
private readonly ITest test;
public MainForm(ITest test)
{
this.test = test;
InitializeComponent();
}
コンテナーは解決され、コードは正常に動作します。問題/質問は、次のコンストラクターがあるMainForm
と言う、から新しいフォームをインスタンス化する方法です。Form2
private readonly ISomeOtherTest someOtherTest;
public Form2(ISomeOtherTest someOtherTest)
{
this.someOtherTest = someOtherTest;
InitializeComponent();
}
私ので次のことを試してみるとMainForm
:
Form2 form2 = new Form2();
form2.Show();
コンストラクターに値を提供していないと不平を言って、壊れます。ただし、コンテナーは既に解決済みであり、下流のコンテナーはすべて解決されると考えていました。明らかに、機能しないため、ここで何かが欠けています。
これは、そのフォームがそれを使用しない場合でも、すべての依存関係をフロントロードする必要があることを意味するので、作成した新しいフォームのインスタンス化にそれらを渡すことができますか? MainForm
50 の依存関係を解決する必要があり、最上位フォームのコンストラクターがそれらすべてを取得する場合、これは奇妙になります。Unity と DI コンテナーを Web API と MVC でほぼ独占的に使用しており、コントローラー用に DI リゾルバーが既に組み込まれているため、理解を深めてください。