サービスクラスにジェネリックリポジトリを実装しようとしています。しかし、WebレイヤーでDbConextをバインドしようとすると、EntityFrameworkを参照する必要があります。
私のDbContext
public partial class SalesDbContext : DbContext, IUnitOfWork
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
public DbSet<Activity> Activities { get; set; }
/// <summary>
/// Allows saving changes via the IUnitOfWork interface.
/// </summary>
void IUnitOfWork.Commit()
{
base.SaveChanges();
}
私のIUnitOfWork
public interface IUnitOfWork
{
/// <summary>
/// Saves changes to all objects that have changed within the unit of work.
/// </summary>
void Commit();
}
私のRepository
public class Repository
{
protected IUnitOfWork UnitOfWork { get; set; }
protected SalesDbContext Context
{
get { return (SalesDbContext)this.UnitOfWork; }
}
public Repository(IUnitOfWork unitOfWork)
{
if (unitOfWork == null) throw new ArgumentNullException("unitOfWork");
this.UnitOfWork = unitOfWork;
}
private DbSet<TEntity> GetDbSet<TEntity>() where TEntity : class
{
return this.Context.Set<TEntity>();
}
protected IEnumerable<TEntity> GetAll<TEntity>() where TEntity : class
{
return this.GetDbSet<TEntity>()
.AsEnumerable();
}
protected virtual void SetEntityState(object entity, EntityState entityState)
{
this.Context.Entry(entity).State = entityState;
}
}
そして最後に私のNinject設定
private static void RegisterServices(IKernel kernel)
{
IUnitOfWork unitOfWork = new SalesDbContext();
kernel.Bind<IUnitOfWork>().ToConstant(unitOfWork);
kernel.Bind<IMarketService>().To<MarketService>();
}
問題は、NinjectがEntity Frameworkへの参照を必要としていることですが、ここに追加したくありません。データレイヤーに属しています。
そして、DbContextのToConstant実装が問題を引き起こすと思いますか?