gpt4 book ai didi

c# - 是否可以在 Global.asax 中添加对服务层的静态引用?

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:04 28 4
gpt4 key购买 nike

我正在评估 Highway.Data.EntityFramework.Unity在单个项目 ASP.NET Web 窗体应用程序的上下文中打包。

我想轻松访问我的服务层。这是 Global 的相关部分:

public class Global : HttpApplication
{
private static readonly IUnityContainer Container = new UnityContainer();

public static IEmployeeService Service { get; private set; }

protected void Application_Start(object sender, EventArgs e)
{
Container.BuildHighway();
Container.RegisterType<IMappingConfiguration, EntityMapping>();
Container.RegisterType<IEmployeeService, EmployeeService>(
new PerRequestLifetimeManager());
Container.RegisterType<IRepository, Repository>(
new PerRequestLifetimeManager());
Container.RegisterType<IDataContext, DataContext>(
new PerRequestLifetimeManager(),
new InjectionConstructor("DataContext", new EntityMapping()));

Service = Container.Resolve<IEmployeeService>();
}
}

在我的客户端中,我可以这样访问:

this.Employees.DataSource = this.service.GetEmployees();
this.Employees.DataBind();

工作正常,但我以前没有采用过这种方法,只是因为它看起来没问题……好吧,是吗?如果没有,我该怎么办?

[已编辑] 要求清楚。

服务:

public class EmployeeService : IEmployeeService
{
private readonly IRepository repository;

public EmployeeService(IRepository repository)
{
this.repository = repository;
}

public IEnumerable<Employee> GetEmployees()
{
return this.repository.Find(
new AllEmployeesQuery())
.ToList()
.Select(ObjectMapper.Map<EmployeeEntity, Employee>);
}
}

AllEmployeesQuery 是一个规范。业务对象通过 AutoMapper 映射到 EF 实体,反之亦然。

谢谢,理查德

最佳答案

您想像避免瘟疫一样避免这种方法。不要在应用程序级别共享数据库连接或资源;它将导致糟糕的性能和细微的错误。

我发现的最佳模型是为每个请求创建一个连接并将其存储在当前请求中,以使该连接可用于请求生命周期内可能发生的任何其他调用。

下面的代码是我们数据层中的一个静态属性。默认行为是在第一次获取时实例化连接并将其存储在请求中,随后对该属性的访问将返回先前创建的实例。该属性还使用户能够在没有 HttpContext 的情况下显式覆盖它。

protected static dataLayer DataContext
{
get
{
if (HttpContext.Current == null)
{
if (StaticContext == null)
StaticContext = new dataLayer();

return StaticContext;
}

if (HttpContext.Current.Items["dataLayer"] == null)
HttpContext.Current.Items["dataLayer"]= new dataLayer();

return (dataLayer)HttpContext.Current.Items["dataLayer"];
}
}

关于c# - 是否可以在 Global.asax 中添加对服务层的静态引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13078280/

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