gpt4 book ai didi

c# - Unity,使用语句和 PerRequestLifetimeManager

转载 作者:行者123 更新时间:2023-11-30 16:11:46 24 4
gpt4 key购买 nike

我在我的项目中使用 Unity。但是我不确定我是否应该使用 using 语句,因为我正在使用 PerRequestLifetimeManager

简单的例子:

注入(inject):

container.RegisterType<IDataContext, MyContext>(new PerRequestLifetimeManager());

用法:

class MyClass
{
private readonly IDataContext _context;

public MyClass(IDataContext context)
{
_context = context;
}

public string MyMethod()
{
// 1. Is this needed?
using (var u = _context)
{
var customers = u.Set<Customer>().OrderBy(o => o.Name);
// ........
}

// 2. OR can I just do this
var customers = _context.Set<Customer>().OrderBy(o => o.Name);

当我在我的注入(inject)中使用 PerRequestLifetimeManager() 时,这是否否定了 using 语句的要求,因为无论如何都会在每个 http 请求之后处理上下文?

最佳答案

如果您使用 using,那么您将立即处置 DbContext,如果您尝试再次访问它,则会导致异常,因此第一种方法通常不是一个好主意。 2 会工作但是如果 DbContext 中出现问题怎么办,例如您想要保留的新数据将不符合数据库设计(例如索引)。在这种情况下,您将无法重新创建 DbContext。我的建议是注册然后解析 DbContexts 的工厂方法:

class MyClass
{
private readonly Func<IDataContext> _contextFactory;

public MyClass(Func<IDataContext> contextFactory)
{
_contextFactory = contextFactory;
}

public string MyMethod()
{
// 1. Is this needed?
using (var u = _contextFactory())
{
var customers = u.Set<Customer>().OrderBy(o => o.Name);
// ........
}
}

关于c# - Unity,使用语句和 PerRequestLifetimeManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24009032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com