1

私のアプリケーションはとてもシンプルですが、da DALとBLLは同じWindowsフォームアプリケーション内の単なるフォルダです。シンプルインジェクターコンテナの入手先と入手方法は?

だから私はProcessar()方法でProcessadorクラスを持って、このクラッセは、コンストラクタでその依存関係(2つのリポジトリ)を受信し、それをチェックアウト。

private IFilaRepositorio _repo; 
public Processador(IFilaRepositorio filaRepo) 
{ 
    _repo = filaRepo; 
} 

public void Processar() 
{ 
} 

私のクラスはProgram.csの中に登録されている、私は、新しいフォームを()を作成し、そこに新しいボタンをドラッグし、ダブルクリックは、イベントをプログラムするために私Processadorクラスをインスタンス化するためにしようと試み、それがコンストラクタのために私に尋ねます議論これらの引数を渡すには? Simple Injectorコンテナからそれらを取得する必要がありますか?もしそうなら、Simple Injectorをコンテナに入れる方法は?ここで私は固執されたポイントです。

private void button1_Click(object sender, EventArgs e) 
{ 
    Processador proc = new Processador(???); <-- Dont know how to pass the arguments 
    proc.Processar(); 
} 

シンプルインジェクタドキュメンテーションは言う:

ヒント:あなたは、通常、アプリケーション全体(アプリケーションドメインごとに1つのインスタンス)のための単一のコンテナインスタンスを作成する必要があります。コンテナインスタンスはスレッドセーフです。

いくつかのコードサンプルや良いアドバイスがありますか?

PS:私が見ることができるように、私はDI、IoCの、SimpleInjectorなどを学ぶために始めていますので、今のところ、私はあまり進んでいない被験者好むん:IoCののO)を

+0

RTM:https://simpleinjector.readthedocs.io/en/latest/windowsformsintegration.html – Steven

答えて

3

コンセプトはあなたということですアプリケーション全体でオブジェクトをインスタンス化する必要はありません。コンテナはこれを管理します。したがって、(コンテナによって管理されるクラスのために)もう '新しい'を使う必要はありません。 'new'を使用すると、追加の依存関係が追加されるため、これはIoCで回避しようとしている問題です。

あなたのケースでは、Processadorはコンテナによってのみインスタンス化されるべきです。だからあなたはボタンハンドラでそれをインスタンス化してはいけません。これを行うには、Processadorが必要とするパラメータもコンテナによって管理されていることを確認する必要があります。だからProcessadorの署名が次のような場合:

Processador(NameFactory nameFactory, FileManager filemanager); 

NameFactoryとFileManagerをコンテナに追加する必要があります。

その後、コンテナからProcessadorのインスタンスを取得できます。例えば

container.GetInstance<IProcessador>(); 

コンストラクタインジェクションまたはプロパティインジェクションによってこれを行うことをお勧めしますが、

あなたはIoCのと依存性注入のより良い理解をしたい場合はミケルCastoことで、このビデオは、あなたが興味がありますhttps://www.youtube.com/watch?v=e3gXWh5YBNI

ミケル・カストロは、(彼はまた、コードサンプルを使用しています)年間のDIについてのセッションを与えてきました。

私はこれがあなたの質問の一部に答えることを願っています。

関連する問題