njeção de Dependência de Construtor na Classe Ba
estou construindo uma classe base de repositório com o Entity Framework em que todo o repositório de entidades herdará. Eu quero injetar oDatabaseContext
na classe base usando Injeção de Dependência usando Ninject. Eu acho que a injeção de construtor é o caminho certo, mas, fazendo isso com a injeção de construtor na classe derivada, devo passar o parâmetro para o construtor na classe base e não o quero. Portanto, uma injeção de incubadora é mais apropriada?
Aqui está o meu código:
public abstract class BaseRepository<TEntity> : IDisposable
where TEntity : class
{
private readonly DatabaseContext _databaseContext;
protected BaseRepository(DatabaseContext databaseContext)
{
this._databaseContext = databaseContext;
}
}
Usando a injeção de construtor no exemplo acima, na minha classe derivada, devo passar o objeto databaseContext para a classe base, não gosto de fazer isso para toda a minha classe derivada:
public class UsuarioRepository : BaseRepository<IUsuario>,
IUsuarioRepository
{
public UsuarioRepository(DatabaseContext databaseContext)
: base(databaseContext)
{
}
}
Injeção Setter em vez de Injeção de Construtor é uma boa maneira de resolver isso? Qual é a melhor maneira
Atualizar
Usando a Injeção Setter, minha classe derivada não terá construtores:
public class UsuarioRepository : BaseRepository<IUsuario>, IUsuarioRepository
{
}
Meu contexto é apenas um em todos os aplicativos. Não preciso da classe derivada para passar o objeto de contexto, mas gosto de injetá-lo na classe base para usar zombarias para testes no futur
Eu resolvo o problema:
Desculpe, estou confuso com a pergunta, mas estou resolvendo meu problema na construção de uma fábrica:
public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity>
where TEntity : class
{
private readonly ContextFactory _contextFactory = new ContextFactory();
protected DatabaseContext CurrentContext
{
get
{
return this._contextFactory.GetCurrentContext();
}
}
}
E minha classe derivada será assim:
public class UsuarioRepository : BaseRepository<IUsuario>, IUsuarioRepository
{
}
E minha fábrica assim:
public class ContextFactory
{
public DatabaseContext GetCurrentContext()
{
return new DatabaseContext();
}
}