Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 在Prism app DI容器中注册修饰类型_Dependency Injection_Prism_Decorator_Ioc Container - Fatal编程技术网

Dependency injection 在Prism app DI容器中注册修饰类型

Dependency injection 在Prism app DI容器中注册修饰类型,dependency-injection,prism,decorator,ioc-container,Dependency Injection,Prism,Decorator,Ioc Container,我正在使用Prism和DryIoc容器开发WPF应用程序。棱镜部分是唯一重要的部分 假设我有一个接口和两个类,其中一个装饰另一个,它们依赖于另一个需要由容器解析的类型ID: public interface IA { void Method(); } public class A : IA { public A(ID d) { ... } public void Method() { ... } } public class B : IA { public B

我正在使用Prism和DryIoc容器开发WPF应用程序。棱镜部分是唯一重要的部分

假设我有一个接口和两个类,其中一个装饰另一个,它们依赖于另一个需要由容器解析的类型ID:

public interface IA {
    void Method();
}

public class A : IA {
    public A(ID d) { ... }
    public void Method() { ... }
}

public class B : IA {
    public B(ID d, IA a) { ... }
    public void Method() { ... }
}
我如何在IContainerRegistry中注册它,以便在我请求IA时得到一个初始化为a的B

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.Register<ID, D>();
    containerRegistry.Register<IA, A>();
    containerRegistry.Register<IA, B>(); // ?
}
受保护的覆盖无效注册表类型(IContainerRegistry containerRegistry)
{
containerRegistry.Register();
containerRegistry.Register();
containerRegistry.Register();/?
}
我如何在IContainerRegistry中注册它,以便在我请求IA时得到一个初始化为a的B

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.Register<ID, D>();
    containerRegistry.Register<IA, A>();
    containerRegistry.Register<IA, B>(); // ?
}
containerRegistry.Register();
Register(c=>newb(c.Resolve(),c.Resolve());
是的,这是丑陋和脆弱的。因此,我将重新审视体系结构并使用泛型来定义装饰类型:

public class B<DecoratedType> : IA where DecoratedType : IA
{
    public B( ID d, DecoratedType a )
    {
    ...
    }
}
公共B类:IA,其中装饰类型:IA
{
公共B(ID d,装饰类型a)
{
...
}
}

containerRegistry.Register();
免责声明:我来自unity背景,unity在未注册的情况下解析具体类型。如果DryIOC不这样做,您必须添加

containerRegistry.Register<A>();
containerRegistry.Register();
我如何在IContainerRegistry中注册它,以便在我请求IA时得到一个初始化为a的B

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.Register<ID, D>();
    containerRegistry.Register<IA, A>();
    containerRegistry.Register<IA, B>(); // ?
}
containerRegistry.Register();
Register(c=>newb(c.Resolve(),c.Resolve());
是的,这是丑陋和脆弱的。因此,我将重新审视体系结构并使用泛型来定义装饰类型:

public class B<DecoratedType> : IA where DecoratedType : IA
{
    public B( ID d, DecoratedType a )
    {
    ...
    }
}
公共B类:IA,其中装饰类型:IA
{
公共B(ID d,装饰类型a)
{
...
}
}

containerRegistry.Register();
免责声明:我来自unity背景,unity在未注册的情况下解析具体类型。如果DryIOC不这样做,您必须添加

containerRegistry.Register<A>();
containerRegistry.Register();

谢谢!是的,我只是在学习Prism和DI以及所有这些东西,所以我可能是做错了。我已经决定用另一种方式来做,但是如果我需要的话,知道如何注册装饰师是件好事。谢谢!是的,我只是在学习Prism和DI以及所有这些东西,所以我可能是做错了。我已经决定用另一种方式来做,但如果我需要的话,知道如何注册装饰师是件好事。