我正在单个项目 ASP.NET Web 窗体应用程序的上下文中评估Highway.Data.EntityFramework.Unity包。
我想轻松访问我的服务层。以下是 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 实体,反之亦然。
谢谢,理查德