我试图让团结依赖注入与利用实体框架WCF服务工作,但我越来越感到困惑的使用情境和存储库的。使用依赖注入WCF服务方法和EF
我设计它的方式是拥有一些存储库类,例如UserRepository,MessageRepository,LocationRepository,每个存储库接受一个EF DbContext对象作为构造参数。这使我可以通过调用context.Save()或回滚等来控制上下文级别的工作单元来控制跨存储库的事务。
我在混乱的是,我不知道如何在依赖注入表示此。我想要两个场景
a)当WCF服务通过WCF方法实例化时,我希望它使用我创建的DbContext类并创建存储库对象,传递创建的DbContext,它将连接到实体框架数据库。
B)当WCF服务的方法是从一个单独的测试项目进行测试,我想嘲笑资源库对象返回嘲笑数据。
如果我只是使用存储库类,这将是相对简单的,因为在我可以调用Container.Resolve()的每个WCF服务方法中,然后我可以使用Unity WCF工厂来设置WCF实例的具体类型,在我的测试项目中为模拟类型手动配置Unity容器。
但是,难点在于我的存储库需要一个DbContext类作为构造函数参数传递,这个构造函数参数将在存储库的生命周期中生存,并且我还需要能够在我的服务中引用它方法,例如
public bool CreateUser(DbUser user)
{
try
{
using (var context = new MyDbContext())
{
var repository = new UserDataRepository(context);
user.GenerateUserLight();
user.GenerateUserProfileLight();
var result = repository.InsertItem(user);
repository.Save();
return result;
}
}
catch (Exception ex)
{
return false;
}
}
我怎么能适应使用统一依赖注入,所以我可以嘲笑它的测试项目上面的方法?