我正在使用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;
}
}在编译时,我得到了错误:
不存在与“ImagesDBService.ImagesDBService(IOptions)”所需的形式参数“设置”相对应的参数。
对于如何使依赖注入工作,有什么想法吗?
发布于 2016-12-21 06:20:38
IOptions依赖将不会用所示代码注入到ImagesDBService中。为此,需要在AddTransient中使用startup.cs。有关DI外部控制器,请参见此问题。或者您可以从控制器将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");
}发布于 2016-12-21 03:24:05
您说这是一个编译错误,所以可能与DI无关,更有可能您缺少了IOptions<>命名空间。
如果您还没有完成,请安装软件包:来自Nuget的Microsoft.Extensions.Options.ConfigurationExtensions。
然后将命名空间Microsoft.Extensions.Options引用到类ImagesDBService。
https://stackoverflow.com/questions/41254457
复制相似问题