Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.net 在unity中注册已经构建的实例很热吗?_.net_Unity Container - Fatal编程技术网

.net 在unity中注册已经构建的实例很热吗?

.net 在unity中注册已经构建的实例很热吗?,.net,unity-container,.net,Unity Container,我试图在unity中注册HttpClient之前构造它,但在运行时失败,错误消息说HttpMessageHandler不可访问 HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://localhost:3721"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json

我试图在unity中注册HttpClient之前构造它,但在运行时失败,错误消息说HttpMessageHandler不可访问

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:3721");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
IUnityContainer container = new UnityContainer();
container.RegisterInstance<HttpClient>(client);
IUnityContainer newcontainer = new UnityContainer();
HttpClient newclient = newcontainer.Resolve<HttpClient>();
HttpMessageHandler是抽象类,所以我认为这是我的代码在运行时失败的原因。 那么,我如何控制unity使用哪个构造,或者有没有一种方法可以使用已经构造好的实例

看起来unity使用参数最多的构造函数创建了另一个HttpClient实例

HttpClient(HttpMessageHandler handler, bool disposeHandler);
是的,默认情况下Unity使用具有最大签名的构造函数

那么,如何控制unity使用哪个构造函数呢

使用InjectionConstructor:
newContainer.RegisterType(newinjectionconstructor())
这告诉Unity使用无参数构造函数

或者有没有一种方法可以使用已经构建的实例

使用RegisterInstance:
container.RegisterInstance(客户端)


警告 如果创建新容器,此容器不会与第一个容器共享注册:

MyObject instance = new MyObject();
IUnityContainer container = new UnityContainer();
container.RegisterInstance<MyObject>(instance);

Assert.AreSame(instance, container.Resolve<MyObject>());

IUnityContainer newcontainer = new UnityContainer();
Assert.AreNotSame(instance, newcontainer.Resolve<MyObject>());
MyObject实例=新建MyObject();
IUnityContainer容器=新的UnityContainer();
container.RegisterInstance(实例);
Assert.arame(实例,container.Resolve());
IUnityContainer newcontainer=新的UnityContainer();
Assert.AreNotSame(实例,newcontainer.Resolve());

,谢谢。关于第三个问题,我确实使用了container.RegisterInstance,但我认为unity仍然是一个新实例,而不是使用现有实例。如果您针对同一个容器进行解析,unity将为您提供相同的实例。我想我没有清楚地描述这个问题,但是你的解决方案给了我另一种方法。谢谢