首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在控制器外部使用依赖项注入asp.net-core v1.1.0用于应用程序设置

在控制器外部使用依赖项注入asp.net-core v1.1.0用于应用程序设置
EN

Stack Overflow用户
提问于 2016-12-21 03:06:41
回答 2查看 5.4K关注 0票数 4

我正在使用asp.net-core v1.1.0 :)

我想从服务类而不是从控制器访问应用程序设置值,我的代码是:

appsettings.json

代码语言:javascript
复制
// appsettings.json
{
  "ImagesDBSettings": {
    "Endpoint": "",
    "Key": "",
  }
}

Startup.cs

代码语言:javascript
复制
// Startup.cs
...
public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddOptions();
    services.Configure<ImagesDBSettings>(Configuration.GetSection("ImagesDBSettings"));
    ...
}
...

ImagesDBSettings.cs

代码语言:javascript
复制
// ImagesDBSettings.cs
public class ImagesDBSettings
{
    public string Endpoint { get; set; }
    public string Key { get; set; }
}

ImagesDBService.cs

代码语言:javascript
复制
// ImagesDBService.cs
public class ImagesDBService
{
    private readonly ImagesDBSettings _settings;
    public ImagesDBService(IOptions<ImagesDBSettings> settings)
    {
        _settings = settings.Value;
    }
}

在编译时,我得到了错误:

不存在与“ImagesDBService.ImagesDBService(IOptions)”所需的形式参数“设置”相对应的参数。

对于如何使依赖注入工作,有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-21 06:20:38

IOptions依赖将不会用所示代码注入到ImagesDBService中。为此,需要在AddTransient中使用startup.cs。有关DI外部控制器,请参见此问题。或者您可以从控制器将IOptions传递给您的服务类(不是最好的选项)。

代码语言:javascript
复制
public IActionResult Index(IOptions<ImagesDBSettings> settings)
{
    ImagesDBService ss = new ImagesDBService(settings);
    return View();
}

以下是我如何在没有DI的应用程序中这样做。我有一个静态AppSettings类,我在ConfigureServices (startup.cs)中进行了配置。然后,我就可以在应用程序中的任何地方访问我的AppSettings。

代码语言:javascript
复制
public static class AppSettings
{
    public static string ConnectionString { get; set; }        
}

Startup.cs:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    AppSettings.ConnectionString = Configuration.GetConnectionString("DefaultConnection");
}
票数 4
EN

Stack Overflow用户

发布于 2016-12-21 03:24:05

您说这是一个编译错误,所以可能与DI无关,更有可能您缺少了IOptions<>命名空间。

如果您还没有完成,请安装软件包:来自Nuget的Microsoft.Extensions.Options.ConfigurationExtensions。

然后将命名空间Microsoft​.Extensions​.Options引用到类ImagesDBService

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41254457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档