【问题标题】:Convert string to class at run time in C#在 C# 中运行时将字符串转换为类
【发布时间】:2020-07-03 12:25:26
【问题描述】:

我在数据库中有类名,例如“Workcenter”和“Holidays”等。 我的项目命名空间是“CMMI.API.Model” 连接命名空间和表名后,它变为 "CMMI.API.Model.Holidays""CMMI.API.Model.Workcenter" 我想将此字符串类名转换为应用程序类名。他们有什么方法可以转换它。 即使我不知道类的名称,也可能有很多类。

我不想像下面这样使用:

object obj;
switch(className)
{
         case "Foo":
        obj = new Foo();
        break;
        case "bar":
        obj = new Bar();
        break;
    ...
}

我不想在 switch 语句中创建新的类实例,而是简单地将字符串转换为类。

任何帮助将不胜感激

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc asp.net-core


    【解决方案1】:

    试试这个

    const string objectToInstantiate = "SampleProject.Domain.MyNewTestClass, MyTestProject";
     
    var objectType = Type.GetType(objectToInstantiate);
    
    var instantiatedObject = Activator.CreateInstance(objectType) as ITestClass;
    

    如果你有不同的构造函数,仍然很难做到这一点,但是使用默认构造函数它会正常工作

    您还可以在那里找到另一个重载:https://docs.microsoft.com/en-US/dotnet/api/system.activator.createinstance?view=netcore-3.1

    【讨论】:

    • 在上面的第一行中,什么是命名空间,什么是类名?
    • 之前的“,”是完整的类名,之后是程序集名称。你也可以只提供完整的类名
    • @SohailShahzad 您可能也对依赖注入感兴趣,与此主题密切相关
    • 是的,我对依赖注入很感兴趣,我还在我们的解决方案中实现了依赖注入。
    • @bradbury9 来自问题中的命名空间,我认为我们谈论的是一些 DTO 对象,而不是服务。注入 DTO 毫无意义(而且我不知道为什么要动态创建它们 :)))))
    猜你喜欢
    • 2014-10-25
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2017-05-22
    • 2021-03-18
    • 2014-05-02
    • 2020-02-20
    • 2023-03-28
    相关资源
    最近更新 更多