私はしたくない..しかし、それは私だけです。
また、私は自分の工場を展開しません..私は Ninjects Factory 拡張機能を使用しています。ここで見つけることができます:
https://github.com/ninject/ninject.extensions.factory
基本的に、通常のようにバインディングを作成しますが、次にファクトリのインターフェイスを作成します (ここでは WinForms を想定しています)。
public interface IMainFormFactory {
frmLogin CreateLoginForm();
frmSettings CreateSettingsForm();
IRepository<MainFormModel> CreateMainFormRepository();
}
..そして拡張子でバインドしますToFactory
:
using Ninject.Factories; // can't quite remember namespace at the moment
public class FactoryModule : NinjectModule {
protected override void Load() {
Bind<IMainFormFactory>().ToFactory();
}
}
ファクトリ拡張では、このインターフェイスの具体的な実装を定義する必要はありません..提供したバインディングに基づいて、これらのオブジェクトをどうするかを既に知っています..バックグラウンドで、このインターフェイスを実装するマネージャーを作成します)。
したがって、次のようなことができます。
private readonly IMainFormFactory _factory;
public frmMainForm(IMainFormFactory factory) {
_factory = factory;
}
public void btnSettings_Click(object sender, EventArgs e) {
// show the settings form..
var settingsForm = _factory.CreateSettingsForm();
settingsForm.ShowDialog();
}
..次に、frmSettings にも注入します。
public frmSettings(ISettingsFormFactory factory) {
// as above except for ISettingsFactory
}
..これが私が物事を行うことを選択する方法です。他の人がより良いアイデアを持っているかもしれません (私も彼らの意見を聞きたいです!)。