您必须引入 Microsoft.Extensions.DependencyInjection 命名空间才能访问泛型
GetService<T>();
应该使用的扩展方法
IServiceProvider
另请注意,您可以直接将服务注入 ASP.NET 5 中的控制器。请参见下面的示例。
public interface ISomeService
{
string ServiceValue { get; set; }
}
public class ServiceImplementation : ISomeService
{
public ServiceImplementation()
{
ServiceValue = "Injected from Startup";
}
public string ServiceValue { get; set; }
}
Startup.cs
public void ConfigureService(IServiceCollection services)
{
...
services.AddSingleton<ISomeService, ServiceImplementation>();
}
家庭控制器
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>();
}
任何一种方法都可用于访问服务。 Startup.cs 的其他服务扩展
AddInstance<IService>(new Service())
始终给出一个实例。您负责创建初始对象。
AddSingleton<IService, Service>()
创建了一个实例,它的行为就像一个单例。
AddTransient<IService, Service>()
每次注入时都会创建一个新实例。
AddScoped<IService, Service>()
在当前 HTTP 请求范围内创建单个实例。它相当于当前作用域上下文中的 Singleton。
2018 年 10 月 18 日更新
见:aspnet GitHub - ServiceCollectionServiceExtensions.cs