Ho un'interfaccia chiamata IContext
. Ai fini di ciò, non importa cosa faccia, eccetto il seguente:
T GetService<T>();
Ciò che questo metodo fa è guardare il contenitore DI corrente dell'applicazione e tenta di risolvere la dipendenza. Mi sembra abbastanza normale.
Nella mia applicazione ASP.NET MVC, il mio costruttore ha questo aspetto.
protected MyControllerBase(IContext ctx)
{
TheContext = ctx;
SomeService = ctx.GetService<ISomeService>();
AnotherService = ctx.GetService<IAnotherService>();
}
Quindi piuttosto che aggiungere più parametri nel costruttore per ogni servizio (perché ciò diventerà davvero noioso e dispendioso in termini di tempo per gli sviluppatori che estendono l'applicazione) Sto usando questo metodo per ottenere servizi.
Ora sembra sbagliato . Tuttavia, il modo in cui attualmente lo giustifico nella mia testa è questo - Posso prenderlo in giro .
Posso. Non sarebbe difficile simulare IContext
per testare il Controller. Dovrei comunque:
public class MyMockContext : IContext
{
public T GetService<T>()
{
if (typeof(T) == typeof(ISomeService))
{
// return another mock, or concrete etc etc
}
// etc etc
}
}
Ma come ho detto, sembra sbagliato. Qualsiasi pensiero / abuso benvenuto.