Dovete portare in Microsoft.Extensions.DependencyInjection namespace per ottenere l'accesso al
GetService<T>();
metodo di estensione generico che dovrebbe essere utilizzato su
IServiceProvider
noti inoltre che è possibile iniettare direttamente servizi nei controller in ASP.NET 5. Vedi sotto l'esempio.
public interface ISomeService
{
string ServiceValue { get; set; }
}
public class ServiceImplementation
{
public ServiceImplementation()
{
ServiceValue = "Injected from Startup";
}
public string ServiceValue { get; set; }
}
Startup.cs
public void ConfigureService(IServiceCollection services)
{
...
services.AddSingleton<ISomeService, ServiceImplementation>();
}
HomeController
using Microsoft.Extensions.DependencyInjection;
...
public IServiceProvider Provider { get; set; }
public ISomeService InjectedService { get; set; }
public HomeController(IServiceProvider provider, ISomeService injectedService)
{
Provider = provider;
InjectedService = Provider.GetService<ISomeService>();
}
Entrambi gli approcci possono essere utilizzati per ottenere l'accesso al servizio. estensioni del servizio aggiuntivi per Startup.cs
AddInstance<IService>(new Service())
Una singola istanza viene dato tutto il tempo. Sei responsabile della creazione iniziale dell'oggetto.
AddSingleton<IService, Service>()
Un'istanza singola viene creata e si comporta come un singleton.
AddTransient<IService, Service>()
Una nuova istanza viene creata ogni volta che viene iniettata.
AddScoped<IService, Service>()
Una singola istanza è creata all'interno della corrente richiesta HTTP portata. È equivalente a Singleton nel contesto di ambito corrente.
Aggiornato 13 ottobre 2016
See: aspnet GitHub - ServiceCollectionServiceExtensions.cs
grazie per risposta, ma se ho molte entità ho bisogno di rewri te costruttori, e non posso usare Activator.CreateInstance, usando l'iniezione negli argomenti del metodo sembra brutto, puoi dirmi un buon patern con YAGNI che segue? – Sam
Stai tentando di utilizzare Entity Framework? L'iniezione è usata nei costruttori, non nei metodi. Non sono sicuro di cosa intendi con YAGNI in questo contesto. – Anton
Sì, sto utilizzando Entity Framework, ma guarda questo caso: Ho entità, ad esempio - Catalogo, e Catalogo hanno proprietà - Url, nel vecchio MVC posso solo creare wrapper httpcontext e usare l'helper dell'URL all'interno della proprietà , nel nuovo MVC non posso farlo, e non ho varianti tranne includere IUrlHelper in Method (aggiungendo il nuovo metodo wrapper su proprietà Path) per DRY, ma questo è ancora così strano – Sam