保持分離我跟以下項目分層應用:DI與資源庫和服務在不同的DLL,關注
- DAL(使用的EntityFramework帶庫)
- DAL.Model(包含實體,並通過所有其他引用)
- 服務
- UI(在WPF)
基礎信息庫嚕KS這樣的:
public abstract class RepositoryBase<T> where T : class
{
private readonly MyContext context;
private readonly IDbSet<T> dbSet;
protected RepositoryBase(MyContext dataContext)
{
context = dataContext;
dbSet = context.Set<T>();
}
protected MyContext Context
{
get { return context; }
}
**And a series of virtual methods for Add, Delete, etc.
}
所有庫擴展這一項,如:
public class MarketRepository : RepositoryBase<Market>
{
public MarketRepository(MyContext dataContext) : base(dataContext)
{
}
public IEnumerable<Market> GetAllMarkets()
{
return this.Context.Markets.ToList<Market>();
}
}
的服務是這樣的:
public class MarketService
{
IMarketRepository _marketRepository;
public MarketService(IMarketRepository marketRepository)
{
_marketRepository = marketRepository;
}
public IEnumerable<Market> GetAllMarkets()
{
return _marketRepository.GetAllMarkets();
}
}
我想實現的是,UI層僅使用DI(現在我正在使用Unity)對服務層,服務層僅引用DAL層(以及所有模型,實體所在的實體)的引用。
的問題是,在我的UI容器我只是想這樣做
unity.RegisterType<IMarketService, MarketService>();
,並沒有做到這一點,以及對倉庫,因爲那時的UI層會對依賴DAL層。
我想增加一個參數的構造函數的服務類,如:
public MarketService() : this(new MarketRepository(*What would I put here?)) { }
但後來我失去的界面給人的抽象,而且我不知道該怎麼做的存儲庫需要的MyContext作爲參數;如果我通過一個新的,那麼我需要引用DAL。
我是否應該更改我的存儲庫以在構造函數中創建新的MyContext,而不是將其作爲參數獲取?
我該如何重構我的架構以使其工作正常並且最小的依賴關係?
爲什麼要創建庫? DbSet已經是一個存儲庫。 –