我正在开发一个Web API,它基于appsettings.json密钥连接到不同的存储库.这些实现在不同的项目中定义,并共享相同的接口

我使用这个代码在它们之间切换

switch (connector)
{
  case "MSSQL":
    services.AddScoped<IDocumentRepository, MSSQL.Repositories.DocumentRepository>();
    break;

  case "MySQL"
    services.AddScoped<IDocumentRepository, MySQL.Repositories.DocumentRepository>();
    break;
}

我正在寻找一个不是基于switchif声明的解决方案.

会是这样的

services.AddScoped<IDocumentRepository, $"{namespace}.DocumentRepository">();

这个是可能的吗?也许是使用反射?

推荐答案

是的,您可以使用反射来做到这一点,但您会失go 一些类型安全.

services.AddScoped(
    typeof(IDocumentRepository),
    Type.GetType($"{myNamespace}.DocumentRepository"));

Csharp相关问答推荐

如何在Visual Studio中为C# spread操作符设置格式规则?

应该使用哪一个?"_counter += 1 OR互锁增量(ref_counter)"""

SignalR客户端不会打印队列位置'

C#DateTime.ToString在ubuntu和centos中返回不同的结果

在调整大小的控件上绘制

获取具有AutoFaces的所有IOptions对象的集合

用C#从Word文档中删除重复的节控件和文本内容控件

使用泛型可空类实现接口

如何在C#中将方法/线程启动传递给基本构造函数

如何在NET 8最小API中自动记录TypedResults.Stream响应

C#Null判断处理失败

正在try 从Blazor中的API读取JSON

C#多键字典和TryGetValue

Postgres ENUM类型在第一次运行时对Dapper不可见

在集成测试中可以在模拟InMemory数据库中设定数据种子

类/值和日期的泛型方法

C# Winforms:从对象树到TreeView的递归转换重复条目

如何使用ODP.NET C#设置Oracle会话时间长度限制

C#定时器回调对象上下文?

如何处理ASP.NET Core中包含两个构造函数的控制器?