Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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
C# 两种不同的类型导致统一的同一实例_C#_Dependency Injection_Unity Container - Fatal编程技术网

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
。这不是抽象概念。