dll

时间:2016-08-04 21:30:28

标签: c# wpf entity-framework dependency-injection unit-of-work

该项目包含以下程序集:

  • POCO - ORM使用的类
  • 存储库:UoW +存储库和ORM
  • 服务:业务逻辑
  • WPF:应用程序本身,只有UI逻辑

未来可能还有另一种类型的客户端,因此所有业务逻辑都位于单独的层中。 ORM可能会被取代。目前它是EF6

UoW + Repository以下列方式实现:当ORM更改时,将有新的具体UoW和依赖于该ORM的存储库:

1)实体接口的通用和特定:

interface IRepository<T> {...}
interface IFooRepository<T>: IRepository<T> {...}

2)IUoW界面:

public interface IUoW: IDisposable
{
  IFooRepository Foos{ get; }
  IRepository<Bar> Bars{ get; }
  int Save();
}

3)依赖于EF DbContext的具体存储库和UoW。

public class UoW: IUoW{
  private MyDbContext _db;

  IRepository<Bar> Bars{ get; private set; }
  IFooRepository Foos{ get; private set; }

  public UoW( MyDbContext db ){
    _db = db;
    Bars = new BarsRepository( _db );
    Foos = new FoosRepository( _db );
  }
  //...
}

问题是当ORM更改时,我不想在许多地方从服务程序集更改我的代码。我认为使用IoC容器并在服务容器中注入UoW可能是一个好主意,但服务是在一个单独的DLL中,UI不应该知道有关存储库层的任何信息。然后我想我可能只是为服务创建一个基类,并在一个地方将它们与UoW紧密结合,但后来我失去了可测试性。

请帮助解决这个问题。还要考虑这是一个绿地项目,到目前为止一切都可以改变。作为DI框架,Unity是首选(但如果重要的话,Autofac或StructureMap也会这样做。)

0 个答案:

没有答案