Olá, tenho uma aplicação web-api que trabalha com entity framework e 3 contextos e para instancia-los uso a classe abaixo
public class AppDbContext <T> where T: DbContext, new()
{
public static T Instancia()
{
if (HttpContext.Current.Items[typeof(T)] == null)
{
T t = new T();
HttpContext.Current.Items.Add(typeof(T), t);
}
return (T)HttpContext.Current.Items[typeof(T)];
}
}
as classe que representam o negócio da app herdam de uma classe padrão, abaixo
public class CRUDPadrao<T, U> where T : CRUDPadrao<T, U>
where U: DbContext, new()
{
public DbContext ctx;
public CRUDPadrao()
{
ctx = AppDbContext<U>.Instancia(); // aqui o contexto é criado
}
public virtual IQueryable<T> Listar()
{
return ctx.Set<T>();
}
public virtual void Incluir()
{
T entidade = (T) this;
ctx.Set<T>().Add(entidade);
ctx.SaveChanges();
}
... e demais métodos do crud
}
então a classe de negócio ficaria assim, herdando de CRUDPadrao ... observe que o tipo do contexto é passado tb
[Table("Localidade")]
public class Cidade : CRUDPadrao<Cidade, TreinamentoDbContext>
{
[Column("Id_Localidade")]
[Key]
public int Id { get; private set; }
[Column("Nome")]
public string Nome { get; private set; }
...
}
o que gostaria de fazer era retirar da declaração da classe, no exemplo Cidade, o tipo do contexto e passar a especificação, se for possível, através de uma anotação no controller, então, ficaria mais ou menos assim:
1) declaração da classe Cidade
[Table("Localidade")]
public class Cidade : CRUDPadrao<Cidade, ???> // não sei bem como ficaria
2) declaração do controller
[CrudContexto(TreinamentoDbContext)]
public class CidadeController : ApiController
{
...
}
Tem como fazer isso ?