1

Meine Anwendung ist sehr einfach, da DAL und BLL sind nur Ordner innerhalb der gleichen Windows Forms Application.Wo und wie bekommt man den Simple Injector Container?

So habe ich eine Processador Klasse mit der Processar() Methode, diese Klasse erhält seine Abhängigkeiten (zwei Repositories) im Konstruktor, überprüfen Sie es aus.

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

public void Processar() 
{ 
} 

Meine Klassen in der Program.cs registriert sind, i erstellt neues Formular(), schleppte neue Schaltfläche hinein, doppelklicken Sie das Ereignis programmieren, tryed meine Processador Klasse instanziiert und es fragt mich, für den Konstruktor Argumente. Wie übergebe ich diese Argumente? Ich muss sie vom Simple Injector Container holen? Wenn ja, wie bekomme ich den Simple Injector in den Container? Hier ist der Punkt, den ich steckte.

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

Einfache Injector Dokumentationen sagen:

Tipp: Sie sollten in der Regel eine einzelne Container-Instanz für die gesamte Anwendung (eine Instanz pro Anwendungsdomäne) erstellen; Container-Instanzen sind Thread-sicher.

Kann mir jemand einige Codebeispiele und/oder Ratschläge zu guten Praktiken geben?

PS: Wie ich sehen kann, i DI, IoC, SimpleInjector, etc. zu lernen bin ab, so, denn jetzt, ich nicht zu weit fortgeschritten Themen bevorzugen: o)

+0

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

Antwort

3

Das Konzept der IoC ist, dass Sie Sie müssen Objekte in Ihrer Anwendung nicht mehr instanziieren. Der Container verwaltet dies für Sie. Sie müssen also nicht mehr "neu" verwenden (für Klassen, die vom Container verwaltet werden). Denn wenn Sie 'neu' verwenden, fügen wir eine zusätzliche Abhängigkeit hinzu, die wir genau mit IoC vermeiden wollen.

In Ihrem Fall: Ihr Processador sollte nur vom Container instanziiert werden. Sie sollten es also nicht in Ihrem Buttonhandler instanziieren. Damit dies funktioniert, müssen Sie sicherstellen, dass die vom Processador benötigten Parameter auch vom Container verwaltet werden. So z.B. wenn die Signatur von processador wie folgt aussieht:

Processador(NameFactory nameFactory, FileManager filemanager); 

benötigen Sie NameFactory und Filemanager mit dem Behälter hinzuzufügen.

Anschließend können Sie eine Instanz von Processador aus dem Container abrufen. z.B.

container.GetInstance<IProcessador>(); 

Obwohl es ratsam ist, dies über Konstruktor-Injektion oder Eigentum-Injektion zu tun.

Wenn Sie ein besseres Verständnis für IoC und Dependency Injection wollen dieses Video von Miquel Casto Sie interessieren könnte: https://www.youtube.com/watch?v=e3gXWh5YBNI

Miquel Castro wurde Sitzungen über DI seit Jahren geben (er verwendet auch Code-Beispiele).

Ich hoffe, dies beantwortet einen Teil Ihrer Frage.

Verwandte Themen