使用Autofac与InstancePerRequest的不同上下文

时间:2016-06-13 15:21:39

标签: c# linq dependency-injection autofac

我在我的项目(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()注册的组件共享(按请求)。

思想?

谢谢!

1 个答案:

答案 0 :(得分:1)

您没有显示“存储库”构造函​​数。如果您希望它正常工作,您还需要将DbContext注册到PerRequest,并使您的“存储库”将其作为构造函数参数注入。然后它会工作。没有隐含的假设,即注册PerRequest的组件的依赖关系应该使用相同的生命周期进行实例化。默认情况下,所有组件都按照依赖项进行注册。