2016-08-20 63 views
1

我嘗試了很多方法,但沒有運氣。 如何解決IWindowService?如何使用一個通用構造函數參數註冊/解析一個類型

這是我有:

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"))); 

窗口服務的實現:

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; 
    } 

錯誤: 類型WindowService沒有一個構造函數的參數(IWindow )。

回答

2

下面是一個工作示例。在你提供的場景中沒有任何理由註冊,所以我刪除了它們。但是如果你真的想要的話,我相信你可以和他們一起工作。

的關鍵是與註冊IWindowService

container.RegisterType(typeof (IWindowService<>), typeof (WindowService<>))

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Registering dependencies ..."); 

     var container = new UnityContainer(); 
     container.RegisterType(typeof (IWindowService<>), typeof (WindowService<>)); 

     container.RegisterType<IWindow, Window>(); 
     container.RegisterType<IvmMain, ViewModel>(); // Or possibly RegisterInstance ? 

     var foo = container.Resolve<IWindowService<IvmMain>>(); 

     Console.ReadKey(); 
    } 
} 

public interface IWindowService<T> 
{ 
} 

public interface IWindow 
{ 
} 

public interface IvmMain 
{ 
} 

public class ViewModel : IvmMain 
{ 
} 

public class Window : IWindow 
{ 
} 

public class WindowService<TViewModel> : IWindowService<TViewModel> 
{ 
    public WindowService(IWindow win, TViewModel vm) 
    { 

    } 
} 
+0

感謝分享! – Legends

+0

還有一個問題(我可以爲此打開一個新的Q): 我使用構造函數注入,所以我不明確使用resolve方法。 如果我有另一個'container.RegisterType ();'並且想在另一個類中使用這個作爲constrtuctor參數? 然後會是什麼方法? 現在我需要命名註冊......而不使用'[Dependency]'屬性 – Legends

+0

某種方式您確實需要知道您想要解析的類型。建設者注入與否。有很多方法可以做到這一點。看看這個答案。 http://stackoverflow.com/questions/38475047/breaking-solid-principles-in-multiple-implementation-of-an-interface/38475681#38475681 – smoksnes

相關問題