我在我的项目(Web应用程序)中使用Autofac for DI。我有一个LINQ表达式,它连接同一个DB中的2个不同的表,这样(All()只是dbSet.AsQueryable()的包装器)
from repo1 in repository1.All()
join repo2 in repository2.All()
on repo1.SomeField = repo2.SomeField
.....
我正在使用InstancePerRequest()在容器构建器中注册我的组件(repo1和repo2)。
当我执行我的代码时,在LINQ代码中,它会抛出以下错误:"指定的LINQ表达式包含对与不同上下文关联的查询的引用。"
我认为dbContext是通过InstancePerRequest()注册的组件共享(按请求)。
思想?
谢谢!
答案 0 :(得分:1)
您没有显示“存储库”构造函数。如果您希望它正常工作,您还需要将DbContext
注册到PerRequest
,并使您的“存储库”将其作为构造函数参数注入。然后它会工作。没有隐含的假设,即注册PerRequest
的组件的依赖关系应该使用相同的生命周期进行实例化。默认情况下,所有组件都按照依赖项进行注册。