C# 两种不同的类型导致统一的同一实例
比如说,我有一门课:C# 两种不同的类型导致统一的同一实例,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,比如说,我有一门课: class A : IInt {} 我正在统一注册班级: container.RegisterType<A>(new ContainerControlledLifetimeManager()); container.RegisterType(新ContainerControlledLifetimeManager()); 我想将IInt注册到A的同一个实例,就好像有人要求A本身一样。例如: A a = container.Resolve<A>()
class A : IInt {}
我正在统一注册班级:
container.RegisterType<A>(new ContainerControlledLifetimeManager());
container.RegisterType(新ContainerControlledLifetimeManager());
我想将IInt注册到A的同一个实例,就好像有人要求A本身一样。例如:
A a = container.Resolve<A>(); // Should return instance of A
IInt i = container.Resolve<IInt>(); // Should return THE SAME instance of A
A=container.Resolve();//应该返回
IInt i=容器。解析();//应该返回同一个
即使上述陈述被推翻,这也应该以同样的方式工作——首先要求IInt,然后要求A
我怎样才能团结一致呢
一个可能但相当丑陋的解决方案:
A a = container.Resolve<A>(); // To resolve A's dependencies
container.RegisterInstance(a);
container.RegisterInstance<IInt>(a);
A=container.Resolve();//要解决A的依赖项,请执行以下操作:
容器。注册状态(a);
容器。注册状态(a);
Unity将在后台自动消除重复注册。这意味着以下将产生预期结果:
container.RegisterType<A>(new ContainerControlledLifetimeManager());
container.RegisterType<IInt, A>(new ContainerControlledLifetimeManager());
container.RegisterType描述了此寄存器涉及的问题,使用Simple Injector解决寄存器反模式,但您会发现这些问题与任何其他DI容器(如Unity)相同。Unity将在后台自动消除重复注册。这意味着以下将产生预期结果:
container.RegisterType<A>(new ContainerControlledLifetimeManager());
container.RegisterType<IInt, A>(new ContainerControlledLifetimeManager());
container.RegisterType描述了此寄存器涉及的问题使用Simple Injector解决寄存器反模式,但您会发现这些问题与任何其他DI容器(如Unity)相同。但您不应该真正解决代码中的任何地方的A
。这不是抽象。但是你不应该在你的代码中的任何地方解析A
。这不是抽象概念。