从非控制器类获取appsetting.json键值

时间:2017-12-15 16:44:17

标签: c# .net-core

我有连接变量存储在appsetting.json中。它们仅用于特定的报告引擎。似乎IOptions<>被自动注入控制器类,但是,我宁愿不通过控制器传递此连接。

所以,目前......

My Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
   ...
   services.Configure<DbContext>(Configuration.GetSection("ConnectionStrings"));
   services.Configure<CrystalContext>(Configuration.GetSection("CrystalConnection"));
   ...    
}

使用POCO类DbContext启动控制器:

private readonly BuildRepository _BuildRepository;

public BuildController(IOptions<DbContext> dbContext)
{
   _BuildRepository = new BuildRepository(dbContext.Value.DB1Connection, dbContext.Value.DB2Connection);
}

所以,这一切都很好,花花公子,因为我的存储库可以到达所需的数据库。

然而,另一个连接发生在帮助器中。我不确定这是做或现在的方式。报告是CrystalReport,它的设置是另一个POCO类。

public class CrystalContext
{
    public String Server { get; set; }
    public String Database { get; set; }
    public String UserId { get; set; }
    public String Password { get; set; }
}

我以为我可以再次使用IOptions<>,就像

一样
public MatterWIPHelper (IOptions<CrystalContext> context) 
{
    connection = context
}

然而,似乎并非如此,因为它不是直接注入该类。我收到错误

  

错误CS7036没有给出对应的参数   需要正式参数'上下文'   'MatterWIPHelper.MatterWIPHelper(IOptions)'

这里的正确方法是什么?

更新:
确认我可以在控制器中使用IOptions<CrystalContext>

private readonly BuildRepository_Repository;
private CrystalContext _CrystalContext;

public BuildController(IOptions<DbContext> dbContext, IOptions<CrystalContext> CrystalContext)
{
    _Repository = new BuildRepository(dbContext.Value.DB1Connection, dbContext.Value.DB2Connection);
    _CrystalContext = CrystalContext.Value;
}

然后我可以将Context传递给我的助手,如

Report.helper(_CrystalContext).

这似乎不是一个很好的方法..

0 个答案:

没有答案