anmeldet/auflöst Ich versuchte viele approches, aber kein Glück. Wie kann ich den IWindowService auflösen?Wie man einen Typ mit einem generischen Konstruktorparameter
Das ist, was ich habe:
var c = new UnityContainer();
c.RegisterType<IvmMain, vmMain>("mvm");
c.RegisterType<IWindow, MainWindow>("mw");
c.RegisterType(typeof(IWindowService<IvmMain>), typeof(WindowService<vmMain>),"win",
new InjectionConstructor(new ResolvedParameter<IWindow>("mw")),
new InjectionConstructor(new ResolvedParameter<IvmMain>("mvm")));
Die Implementierung des Fensters Service:
public class WindowService<TViewModel> : IWindowService<TViewModel>
{
readonly Window _win;
TViewModel _vm;
public WindowService(IWindow win, TViewModel vm)
{
_vm = vm;
_win = win as Window;
_win.DataContext = vm;
}
Fehler: Der Typ WindowService keinen Konstruktor haben, der die Parameter nimmt (IWindow).
Dank! – Legends
Eine weitere Frage (ich kann ein neues Q dafür öffnen): Ich benutze Konstruktorinjektion, daher verwende ich die Methode resolve nicht explizit. Wenn ich einen anderen 'container.RegisterType();' hätte und diesen als Constrtuctor-Parameter in einer anderen Klasse verwenden wollte? Was wäre dann der Ansatz? Jetzt würde ich benannte Registrierungen..witout 'Attribut [Abhängigkeit] benötigen –
Legends
Eine Weise, die Sie wirklich wissen müssen, welchen Typ Sie auflösen möchten. Konstruktorinjektion oder nicht. Es gibt eine Reihe von Möglichkeiten, dies zu tun. Sieh dir diese Antwort an. http://StackOverflow.com/Questions/38475047/Breaking-solid-Principles-in-Multiple-Implementation-of-an-interface/38475681#38475681 – smoksnes