我正在构建一个基于 Entity Framework 的存储库基类,所有实体存储库都将继承该基类。我希望使用 Ninject 通过依赖注入将
这是我的代码:
DatabaseContext
注入到基类中。我认为构造函数注入是正确的方式,但是在派生类中使用构造函数注入时,我必须传递参数到基类的构造函数中,而我不想这样做。因此,Setter Injection 更合适吗?这是我的代码:
public abstract class BaseRepository<TEntity> : IDisposable
where TEntity : class
{
private readonly DatabaseContext _databaseContext;
protected BaseRepository(DatabaseContext databaseContext)
{
this._databaseContext = databaseContext;
}
}
在上面的示例中使用构造函数注入,在我的派生类中,我必须向基类传递databaseContext对象,但我不想对所有派生类都这样做:
在上述示例中使用构造函数注入,在我的派生类中,我必须将databaseContext对象传递给基类,但我不想在所有派生类中都这样做。
public class UsuarioRepository : BaseRepository<IUsuario>,
IUsuarioRepository
{
public UsuarioRepository(DatabaseContext databaseContext)
: base(databaseContext)
{
}
}
使用Setter注入而不是构造函数注入是解决这个问题的好方法吗?哪种方法最好?
更新:
使用Setter注入后,我的派生类将没有构造函数:
public class UsuarioRepository : BaseRepository<IUsuario>, IUsuarioRepository
{
}
我的应用程序中只有一个上下文. 我不需要派生类来传递上下文对象,但我想将其注入基类以便将来使用模拟测试。
我解决了这个问题:
抱歉,我对问题感到困惑,但是我通过构建一个工厂来解决了我的问题:
public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity>
where TEntity : class
{
private readonly ContextFactory _contextFactory = new ContextFactory();
protected DatabaseContext CurrentContext
{
get
{
return this._contextFactory.GetCurrentContext();
}
}
}
我的派生类将会是这样:
public class UsuarioRepository : BaseRepository<IUsuario>, IUsuarioRepository
{
}
我的工厂就像这样:
public class ContextFactory
{
public DatabaseContext GetCurrentContext()
{
return new DatabaseContext();
}
}