这两个范围有什么区别?
我在每一层(存储库,服务,MVC App)中构建Module
,但是为了拥有InstancePerHttpRequest
,您需要Autofac.Mvc程序集。
我应该在存储库和服务层中使用哪个范围?
最佳答案
InstancePerHttpRequest
和InstancePerApiRequest
本质上是做相同的事情-对于每个离散的Web请求,您将获得一个服务实例。我将使用InstancePerHttpRequest
作为其余的答案,但请记住,这两个是可互换的。InstancePerLifetimeScope
意味着将为要求您提供服务的每个生存期范围创建一个新的服务实例。每个Web请求都有其自己的新生命周期范围,因此实际上,这两个请求通常会做同样的事情。
唯一真正的区别是,如果您有一个使用InstancePerHttpRequest
注册的服务,并且您从另一个注册为SingleInstance
的服务中请求了其中一项服务。在这种情况下:
SingleInstance
组件位于根范围InstancePerHttpRequest
组件位于一个名为“AutofacWebRequest”的范围内,该范围是根范围Autofac不允许从子作用域进行解析-因此从本质上讲,
SingleInstance
服务找不到InstancePerHttpRequest
服务。但是,如果在这种情况下使用了
InstancePerLifetimeScope
(而不是InstancePerHttpRequest
),那么您的服务将可以很好地解决。我用可下载的代码写了一篇相当详尽的文章,试图详细解释所有这些信息-see here。从文章引用:
希望对您有所帮助-我感谢这个问题已经很老了,但是仍然很重要!