Dependency injection 在Prism app DI容器中注册修饰类型
我正在使用Prism和DryIoc容器开发WPF应用程序。棱镜部分是唯一重要的部分 假设我有一个接口和两个类,其中一个装饰另一个,它们依赖于另一个需要由容器解析的类型ID: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
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以及所有这些东西,所以我可能是做错了。我已经决定用另一种方式来做,但如果我需要的话,知道如何注册装饰师是件好事。