我尝试了很多方法,但是没有运气。如何解决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)
{
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句