我正在使用asp.net-core v1.1.0:)
我想从服务类而不是从控制器访问应用程序设置值,我的代码是:
appsettings.json
// appsettings.json
{
"ImagesDBSettings": {
"Endpoint": "",
"Key": "",
}
}
Startup.cs
// Startup.cs
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddOptions();
services.Configure<ImagesDBSettings>(Configuration.GetSection("ImagesDBSettings"));
...
}
...
ImagesDBSettings.cs
// ImagesDBSettings.cs
public class ImagesDBSettings
{
public string Endpoint { get; set; }
public string Key { get; set; }
}
ImagesDBService.cs
// ImagesDBService.cs
public class ImagesDBService
{
private readonly ImagesDBSettings _settings;
public ImagesDBService(IOptions<ImagesDBSettings> settings)
{
_settings = settings.Value;
}
}
编译时我收到错误:
没有任何论据符合所需的形式参数&#39;设置&#39; of&#39; ImagesDBService.ImagesDBService(IOptions)&#39;
关于如何使依赖注入工作的任何想法?
答案 0 :(得分:3)
不会使用显示的代码将IOptions依赖注入到ImagesDBService中。你需要在startup.cs中使用AddTransient。对于DI外部控制器,请参阅此question。或者,您可以从控制器向服务类传递IOptions(不是最佳选项)。
public IActionResult Index(IOptions<ImagesDBSettings> settings)
{
ImagesDBService ss = new ImagesDBService(settings);
return View();
}
以下是我在没有DI的应用中的表现。我有一个静态AppSettings类,我在ConfigureServices(startup.cs)中配置。然后,我只需在应用程序的任何位置访问我的AppSettings。
public static class AppSettings
{
public static string ConnectionString { get; set; }
}
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
AppSettings.ConnectionString = Configuration.GetConnectionString("DefaultConnection");
}
答案 1 :(得分:0)
你说这是一个编译错误所以可能与DI无关,你更有可能错过了IOptions<>
命名空间。
如果您还没有这样做,请安装包:Microsoft.Extensions.Options.ConfigurationExtensions from Nuget.
然后将名称空间Microsoft.Extensions.Options
引用到您的班级ImagesDBService