如何用一个泛型构造函数参数注册/解析类型

本文关键字:类型 注册 参数 何用一 泛型 构造函数 | 更新日期: 2023-09-27 18:03:22

我尝试了很多方法,但都没有成功。如何解决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)的构造函数

如何用一个泛型构造函数参数注册/解析类型

下面是一个工作示例。在您提供的场景中,没有理由使用命名注册,因此我删除了它们。但我相信如果你真的想的话,你可以和他们一起工作。

关键是将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)
    {
    }
}