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

传说

我尝试了很多方法,但是没有运气。如何解决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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建一个接受不同参数类型的通用函数

当其中一个参数是动态的时,如何获取类型的构造函数?

如何用一个通用构造函数替换两个Java构造函数

使用带有参数的构造函数向IOC注册一个类(具体类无接口)

如何编写一个通用的指针类型的函数?

如何决定一个构造函数的参数

一个参数构造函数如何工作?

向多个构造函数注册通用类型

打字稿:与上一个参数的解析类型相同的通用类型

C#-创建一个其构造函数采用通用参数的类,导致转换异常

通用构造函数接受类型T的类对象,并返回T,这次T是一个List

如何使用一个类的构造函数作为Java中另一个类的对象的参数?

有一种注册服务的方法,该服务以隐式类型给出,并具有构造函数,该构造函数具有一个以上原始类型的参数

一个函数,它接受一个扩展基类型的构造函数并返回相同的构造函数减去第一个参数

如何为另一个构造函数调用的构造函数提供参数?

Swift:创建一个将类类型作为参数的工厂函数,并输出该类的构造函数

是否可以将构造函数用作TypeScript中另一个函数的参数类型?

如何获得省略最后一个参数的函数类型

Typescript如何删除函数类型的最后一个参数?

如何获取函数的第一个参数的类型?

在另一个类的构造函数中使用一个类作为参数

如何用依赖注入的构造函数注册一个类?(简单)

如何使用相同的参数类型重载函数但其中一个可以为空

从C ++ 17中的另一个构造函数调用具有不同参数类型的构造函数

如何使泛型对象使用在Typescript中使用一个类型或void的两个函数的函数参数

B类中构造函数的参数0需要一个找不到A类类型的Bean

X 中构造函数的参数 0 需要一个无法找到的“Y”类型的 bean

[]中构造函数的参数0需要一个[]类型的Bean

一个构造函数可以照顾多种类型的不同对象参数吗?