您创建了一个扩展方法来控制EF上下文的生命周期。我的代码在
之下public static Entities GetCentralRepositoryContext(this HttpContext httpcontext)
{
if (HttpContext.Current.Items["context"] == null)
{
HttpContext.Current.Items["context"] = new Entities();
}
return (Entities)HttpContext.Current.Items["context"];
}
我在我的解决方案中创建了许多层作为项目,并开始考虑IOC。上面的代码位于我的BL层项目中,但为了使它能够工作,我需要创建一个对DL层的引用,因为它是实体类所在的位置。如何删除对DL图层的引用并注入我的扩展方法。这甚至可能吗?
答案 0 :(得分:1)
您正在采取的方法有几个问题。首先,静态方法往往是松散耦合的问题,在尝试对代码进行单元测试时,您会很快注意到这一点。除此之外,您的业务层依赖于System.Web
,这使您的业务层技术特定,这将使得将系统的一部分移动到例如Windows服务变得非常困难,并且再次使得单元测试几乎不可能
不要这样做,而是开始将Entities
类注入到需要它的所有类型的构造函数中。在每个请求开始时,您可以在应用程序中构建服务的依赖关系图,特定于该请求。此时,您可以确定Entities
实例应具有Web请求的生命周期。
当您开始编写单元测试时,您会发现在应用程序中直接使用EF ObjectContext
时会非常困难。 This article可能会为您提供一些如何抽象可测试界面背后的ObjectContext
的想法。