c# - 通过.Net Core中的依赖注入映射接口以使用加载的配置来连接类
问题描述
我已经编写了一个扩展ServiceCollection
,我想在其中配置我的 EntityFramework Core 配置和相应的 DbContext。通过 json 文件加载配置是可行的。现在,我正在努力的部分是我想将 my 映射IInstanceConfiguration
到 my OracleConfiguration
,作为一个完整的实例。我目前的解决方案看起来像这样。我添加了两条评论,我想知道正确(/更好)的实现方式。
亲切的问候!
public static void RegisterEfCoreOracle<T>(this IServiceCollection services, string configurationDirectory, string configurationFile) where T : DbContext
{
//Adding configuration file
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(configurationDirectory)
.AddJsonFile(configurationFile, optional: false)
.Build();
services.Configure<OracleConfiguration>(configuration);
//Do i really have to do it manually this way? What would be another, elegant way?
var oraInstance = new OracleConfiguration(configuration.GetValue<string>("Name"), configuration.GetValue<string>("DataSource"), configuration.GetValue<string>("UserId"),
configuration.GetValue<string>("Password"),configuration.GetValue<bool>("UseConsoleLogging"), configuration.GetValue<string>("Compatibility"));
//This is the line where I am struggling.
services.AddSingleton<IInstanceConfiguration, OracleConfiguration>(oraInstance);
var oraConfig = services.ReturnServiceProvider().GetRequiredService<OracleConfiguration>();
services.AddDbContext<T>();
}
public static ServiceProvider ReturnServiceProvider(this IServiceCollection services) => services.BuildServiceProvider();
解决方案
该var oraInstance
行是完全没有必要的,该行services.Configure<OracleConfiguration>(configuration);
应该按预期设置依赖注入。
如果您要注入的类型是特别期望IInstanceConfiguration
的而不是具体的OracleConfiguration
,您可以像这样注册它:
services.AddSingleton<IInstanceConfiguration>(sp =>
sp.GetRequiredService<OracleConfiguration>());
否则,如果您可以控制它被注入的类型,最好IInstanceConfiguration
完全删除接口,并让它接受IOptions<OracleConfiguration>
。
推荐阅读
- r - 在 Jupyter Notebook、Anaconda 中安装软件包时出错
- visual-studio-code - 工作区中的 VS Code 搜索仅在编辑器中查看打开的文件
- devilbox - PhpStorm 在通过 Devilbox 制作的容器中看不到 php.ini。由于无法配置 xdebug。如何解决?
- javascript - 如何确定对未安装的组件执行反应状态更改的组件或功能
- javascript - MongoDB:如何获取在另一个元素数组中找到其数组元素的所有项目
- amazon-web-services - AWS CloudFormation“模板与之前的运行相同。更新堆栈中止”
- python - 如何将url解析为flask中的方法或视图
- typescript - 滚动网页时 Phaser 3 拖动事件错误
- led - 实现一个程序从 DIP 开关读取 8 位数据并在 8 位 LED 上显示状态
- python - conda 不在环境中安装软件包