Autofac:在类型A已经注册为类型后,注册类型A的实例

时间:2015-06-19 14:45:57

标签: c# entity-framework-6 autofac

我有一个PortalEntities课程,其延伸DbContext

我有一个EFGenRepo课程,其中包含context类型的私人道具PortalEntites。这个EFGenRepo类有一个构造函数:

public EFGenRepo(PortalEntities entities) { this.context = entities; }

现在我有一个ClientManager类,其中有一个名为EFGenRepo repo的实例。请记住,因为context中的repo道具是私有的,我无法访问它!

现在我在ClientManager

的一个方法中有这行代码

FKEntityList.Add(new PortalEntities().Set<FKEntity>().Find(FKEntity_id));

这是我收到错误消息的地方:

  • 无法定义两个对象之间的关系,因为它们附加到不同的ObjectContext对象。

使用FKEntityList的查找方法构建repocontext本身使用EFGenRepo中的PortalEntities道具。

我使用autofac并注册cb.RegisterType<PortalEntities>().AsSelf().InstancePerRequest();这样,所以可以在控制器中注入: new PortalEntites()

但是在我的方法中,我使用PortalEntities,并且必须以类型cb.RegisterInstance(new PortalEntities()).AsSelf().SingleInstance();以某种方式注册。但我无法让它发挥作用。我已经尝试过以下代码:

{{1}}

有人知道如何设置吗?

1 个答案:

答案 0 :(得分:1)

在ClientManager类中,您不应创建(甚至使用)PortalEntities类。将数据库查询逻辑移动到已存在PortalEntities实例的存储库中。

相关问题