我需要访问Startup.cs中的ConfigureServices方法内的服务,我这样做:
services.AddScoped<ICustomService, CustomService>();
var sp = services.BuildServiceProvider();
var service = sp.GetService<ICustomService>(); // this is null
但上面的var service
始终为空。
我做错了什么?
答案 0 :(得分:1)
我有这样的问题 - 我有一个单身设置&#39;我想用的服务。我通过实际创建一个然后通过重载来注册那个确切的实例来解决它,这个重载允许你指定一个提供者,而不仅仅是注册这个类,并添加一个很好的大评论来解释这个:
var settingsService = new SettingsService(_hostingEnvironment);
//Add a concrete settings service which is then registered as the de facto settings service for all time.
//we need to do this as we want to use the settings in this method, and there isn't a satisfactory method to
//pull it back out of the IServiceCollection here (we could build a provider, but then that's not the same provider
//as would be build later... at least this way I have the exact class I'll be using.
services.AddSingleton<ISettingsService, SettingsService>((p) => settingsService);
..
..
..
var thing = settingsService.SomeSettingIWant();
如果你想要的不是单身而是短暂的,那么我想你可以在那里创建一个具体的课程吗?我知道这可能感觉有点像作弊,但它会工作得很好......