Я создаю базовый класс хранилища с Entity Framework, где все хранилища Entities будут наследоваться.Я хочу внедрить DatabaseContext
в базовый класс, используя Dependency Injection, используя Ninject.Я думаю, что Constructor Injection - верный путь, но делая это с Constructor Injection в производном классе, я должен передать параметр конструктору в базовом классе, и я не хочу этого.Таким образом, инъекция сеттера более уместна?
Вот мой код:
public abstract class BaseRepository<TEntity> : IDisposable
where TEntity : class
{
private readonly DatabaseContext _databaseContext;
protected BaseRepository(DatabaseContext databaseContext)
{
this._databaseContext = databaseContext;
}
}
Используя конструктор Injection в приведенном выше примере, в моем производном классе я должен передать объект databaseContextв базовый класс, я не люблю делать это со всем моим производным классом :
public class UsuarioRepository : BaseRepository<IUsuario>,
IUsuarioRepository
{
public UsuarioRepository(DatabaseContext databaseContext)
: base(databaseContext)
{
}
}
Внедрение сеттера вместо инжектора конструктора - это хороший способ решить эту проблему?Каков наилучший способ?
Обновление:
Использование метода Setter Injection моего производного класса не будет иметь конструкторов:
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();
}
}