2016-06-10 6 views
1

ich folgende fest codierte Setup MVVM in einer Anwendung unter Verwendung von:Registrieren und Auflösen von Abhängigkeiten in einer Schleife

var ips = configFile.Read(); 

for (string ip in ips) 
{ 
    var tcpClient = new TcpClient(ip); 
    var stream = (Stream) tcpClient.GetStream(); 
    var service = new Service(stream); 
    var connectionViewModel = new ConnectionViewModel(service); 
    var extendedViewModel = new ExtendedViewModel(connectionViewModel); 
} 

Eine Anzahl von IP-Adressen aus einer Datei gelesen werden, und jede Adresse führt zu einer Ansichtsmodell erstellt wird, dass zeigt Zeug von der IP an.

Was ist der beste Ansatz, wenn ich DryIoc damit umgehen lassen möchte? Alle new Objekte sind eine eindeutige foreach-Schleife.

Antwort

1

Mögliche Option Func mit der ip weitergeben müssen:

var c = new Container(); 
c.Register<ExtendedViewModel>(); 
c.Register<ConnectionViewModel>(); 
c.Register<Service>(); 
c.Register<TcpClient>(); 

foreach (var ip in ips) { 
    var getVM = c.Resolve<Func<string, ExtendedViewModel>>(); 
    var vm = getVM(ip); 
    // use vm 
} 

Update:

für Stream, fügen Sie die folgende Registrierung, ohne die Auflösung Teil Wechsel:

c.Register<Stream>(Made.Of(
    _ => ServiceInfo.Of<TcpClient>(), 
    tcpClient => (Stream)tcpClient.GetStream())); 

gemacht .Of spielt gut mit Func und anderen Wrapper-Auflösungen und kann in der Mitte des Objektdiagramms sein. Deshalb ist es besser als RegisterDelegate.

+0

Interessant. Werden dadurch alle Abhängigkeiten eindeutig aufgelöst? Ich habe eine Variation des Problems mit Stream hinzugefügt. Kann die Antwort geändert werden, um die Variation einzuschließen? – kasperhj

+0

Ich habe meine Antwort aktualisiert. Es löst die restlichen Abhängigkeiten auf, die nicht als Func bereitgestellt werden, indem sie aus dem Container aufgelöst werden. – dadhi

+0

Danke. Ich erhalte den Fehler "Registrierter Einweg-Transient-Dienst TcpClient mit Schlüssel {kein Schlüssel}" bei der Registrierung von TcpClient. Wie soll ich vorgehen? – kasperhj

Verwandte Themen