При создании приложения с помощью шаблона вы будете иметь что-то вроде этого на Startup
класс:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
}
Вы можете добавить зависимости есть, например:
services.AddTransient<ITestService, TestService>();
Если вы хотите получить доступ к ITestService
на своем контроллере, вы можете добавить IServiceProvider
на конструктор, и он будет вводиться:
public HomeController(IServiceProvider serviceProvider)
Затем вы можете разрешить службу вы добавили:
var service = serviceProvider.GetService<ITestService>();
Обратите внимание, что для использования универсальной версии, вы должны включать в себя пространство имен с расширениями:
using Microsoft.Extensions.DependencyInjection;
ITestService.cs
public interface ITestService
{
int GenerateRandom();
}
Tes tService.cs
public class TestService : ITestService
{
public int GenerateRandom()
{
return 4;
}
}
Startup.cs (ConfigureServices)
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
services.AddTransient<ITestService, TestService>();
}
HomeController.cs
using Microsoft.Extensions.DependencyInjection;
namespace Core.Controllers
{
public class HomeController : Controller
{
public HomeController(IServiceProvider serviceProvider)
{
var service = serviceProvider.GetService<ITestService>();
int rnd = service.GenerateRandom();
}
возможно дубликат [Как решить Instance Внутри ConfigureServices в ASP.NET 5 ] (http://stackoverflow.com/questions/31863981/how-to-resolve-instance-inside-configureservices-in-asp-net-5) –
Do y ou хотят разрешить их в методе 'ConfigureServices()' (с 'IServiceCollection') или просто в любом месте приложения? –
@HenkMollema: Везде внутри автозагрузки на самом деле. – davenewza