.net 在unity中注册已经构建的实例很热吗?
我试图在unity中注册HttpClient之前构造它,但在运行时失败,错误消息说HttpMessageHandler不可访问.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
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将为您提供相同的实例。我想我没有清楚地描述这个问题,但是你的解决方案给了我另一种方法。谢谢