C# 将一种类型标记为;肮脏的;以便创建一个新实例

C# 将一种类型标记为;肮脏的;以便创建一个新实例,c#,entity-framework,unity-container,C#,Entity Framework,Unity Container,我使用Unity在我的代码中需要它的许多地方注入DbContext。因为它是一个web应用程序,所以我使用PerRequestLifeTimeManager。 但是,我有一种情况,即我进行批量插入,并且需要频繁地重新创建DbContext 情况如下: public class TypeA { public void Do() { TypeB variable = new TypeB(); variable.EncapsulatedOperation

我使用Unity在我的代码中需要它的许多地方注入DbContext。因为它是一个web应用程序,所以我使用PerRequestLifeTimeManager。 但是,我有一种情况,即我进行批量插入,并且需要频繁地重新创建DbContext

情况如下:

public class TypeA
{
    public void Do()
    {
        TypeB variable = new TypeB();
        variable.EncapsulatedOperation();
    }
}

public class TypeB
{
    public void EncapsulatedOperation()
    {
        //Call unity behind the scene to resolve a service, resolving the DbContext with Unity
    }   
}
类型B中的深度甚至可以更大,因为服务通常会实例化类型C和D的对象,它们自己调用其他使用Unity解析DbContext的服务


所以我所做的是在TypeA中创建一个新的DbContext,并将其注入到B类型的封装操作中,但显然它是不可管理的,因为解析的服务仍然使用Unity解析的DbContext。我需要一些方法来告诉unity创建DbContext的新实例。在应用程序的其余部分中,PerRequestLifeTime管理器很好,但在这个特殊情况下,我需要能够准确地告诉Unity何时需要创建新的Instance。我该怎么做?

为什么不在TypeA中创建DbContext,并使用TypeB的构造函数注入TypeA?通过这种方式,TypeB可以通过TypeA访问DbContext,并且您可以确保使用相同的DbContext。另外,不需要创建DbContext的新实例,您可以使用类似以下内容刷新和重置数据:
DbContext.refresh(RefreshMode.KeepChanges)//RefreshMode.KeepCurrentValues或RefreshMode.OverwriteCurrentValues
(System.data.Linq.RefreshMode)谢谢,我不做手动注入的原因是,实际上使用DbContext有很多依赖项,在B中注入它是不够的。您所说的刷新非常有趣。ig,它是否将清除缓存中上下文的缓存?您可以使用刷新方法清除缓存或将其更新到最近的实例。您甚至可以指定要刷新的表,甚至可以指定要刷新的行。是文档页面,刷新模式可以找到只是一个更新,我忘了做,你混淆了DataContext和DbContext。ObjectContext API的Refresh()方法没有封装您描述的行为为什么不在TypeA中创建DbContext并使用TypeB的构造函数注入TypeA?通过这种方式,TypeB可以通过TypeA访问DbContext,并且您可以确保使用相同的DbContext。另外,不需要创建DbContext的新实例,您可以使用类似以下内容刷新和重置数据:
DbContext.refresh(RefreshMode.KeepChanges)//RefreshMode.KeepCurrentValues或RefreshMode.OverwriteCurrentValues
(System.data.Linq.RefreshMode)谢谢,我不做手动注入的原因是,实际上使用DbContext有很多依赖项,在B中注入它是不够的。您所说的刷新非常有趣。ig,它是否将清除缓存中上下文的缓存?您可以使用刷新方法清除缓存或将其更新到最近的实例。您甚至可以指定要刷新的表,甚至可以指定要刷新的行。是文档页面,刷新模式可以找到只是一个更新,我忘了做,你混淆了DataContext和DbContext。ObjectContext API的Refresh()方法没有封装您描述的行为