我有连接变量存储在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).
这似乎不是一个很好的方法..