尝试使用我的WebApi实现autofac ......但是对于我的对象有一些生命周期问题......
我的启动webapi课程:
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest();
container.RegisterType<MyConcreteClass>().As<IMyInterface>().InstancePerRequest();
var container = builder.Build();
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(config);
var csl = new AutofacServiceLocator(container);
ServiceLocator.SetLocatorProvider(() => csl);
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
但不起作用
无法解析“IMyInterface”类型,因为无法找到它所属的生命周期范围。此注册公开了以下服务: - IMyInterface
详细信息---&gt;从请求实例的范围中看不到带有与“AutofacWebRequest”匹配的标记的范围。
如果您在执行Web应用程序期间看到这一点,它通常表示SingleInstance()组件(或类似方案)正在请求注册为每HTTP请求的组件。在Web集成下,始终从依赖项解析程序或请求生存期范围请求依赖项,而不是从容器本身请求。 (详见内部异常。)
删除此部分 .InstancePerRequest(); ,然后正常工作,但该对象未处理。
我做错了什么?
谢谢!
答案 0 :(得分:1)
我强烈怀疑问题出在以下代码中:
var csl = new AutofacServiceLocator(container);
ServiceLocator.SetLocatorProvider(() => csl);
错误消息表明必须使用依赖项解析程序解决依赖关系,但这会绕过它并使用容器本身。
在旁注上,使用service locator is anti-pattern。您应该将依赖项注入控制器和其他MVC扩展点,而不是使用此方法。