【问题标题】:autofac single instance per requesting type每个请求类型的 autofac 单个实例
【发布时间】:2017-01-20 21:51:59
【问题描述】:
我在 asp.net web api 2 项目中有以下 c# 类:
WebService1 依赖于 IHttpClientWrapper
WebService2 依赖于 IHttpClientWrapper
我如何注册 autofac,以便每次解析 webService1 时,它都会获得相同的 HttpClientWrapper 实例,而 webService2 会获得相同的 HttpClientWrapper 实例。然而,HttpClientWrapper 的每个实例仅在具有相同类型的类型对象之间共享。
任何帮助将不胜感激。
【问题讨论】:
标签:
c#
asp.net
asp.net-web-api
autofac
【解决方案1】:
我了解您尝试“每个依赖项有一个实例”。
Autofac 中没有这种开箱即用的功能,但可以这样做,例如有以下注册:
builder.RegisterType<HttpClientWrapper>().Named<IHttpClientWrapper>("WebService1").SingleInstance();
builder.RegisterType<HttpClientWrapper>().Named<IHttpClientWrapper>("WebService2").SingleInstance();
builder.Register(c => new WebService1(c.ResolveNamed<IHttpClientWrapper>("WebService1"))).InstancePerLifetimeScope();
builder.Register(c => new WebService2(c.ResolveNamed<IHttpClientWrapper>("WebService2"))).InstancePerLifetimeScope();
现在,每次解析或注入 WebService1 或 WebService2 时,每个 WebService 都会获得相同的 IHttpClientWrapper 实例。