如何用一个泛型构造函数参数注册/解析类型
本文关键字:类型 注册 参数 何用一 泛型 构造函数 | 更新日期: 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)
{
}
}