gpt4 book ai didi

c# - 如何根据字符串动态调用类?

转载 作者:行者123 更新时间:2023-12-04 16:57:24 27 4
gpt4 key购买 nike

您能给我一些指导以根据名称动态加载类吗?该名称在运行时作为参数提供。

    static void Main(string[] args) 
{
...
}

假设我的论点是“鹦鹉”,那么我想加载我的 parrotProcessor类(class)。如果我的参数名称是“snake”,那么我加载我的 To make snakeProcessor .当然这意味着我有一个继承接口(interface) IProcessor 的鹦鹉和蛇处理器类。我不知道所有处理器的列表是什么。此列表由其他开发人员维护,他们可以创建他们想要的内容。

我的处理器接口(interface)示例:
    public interface IProcessor
{
void Process();
}

在我的 Program.cs
    static void Main(string[] args) 
{
var processor = GetProcessor(args[0]);
processor.Process();
}

我的问题是我应该在 GetProcessor() 中做什么方法?

这是我此刻所拥有的:
    private IProcessor GetProcessor(string name)
{
switch (name)
{
case "ant":
return new AntProcessor();
case "parrot":
return new ParrotProcessor();
case "snake":
return new SnakeProcessor();
default:
throw new ArgumentException("Case not found");
}
}

但这意味着每次创建新的处理器专用类时,我都必须更新这个丑陋的开关。这是不可能的。我现在可以为发展而做,但不能长期这样做。

有哪些解决方案?我应该在 NInject 中使用类似于 DI 的东西还是混合所有东西?我可以简单地使用 Invoke 方法吗?为什么 Invoke 或 DI?我知道这个问题是一个悬而未决的问题,但它在很多人的代码中经常发生,所以我想有关于它的独特的最佳实践。

最佳答案

您可以使用以下内容

var type = Type.GetType("MyFullyQualifiedTypeName");
var myObject = (MyAbstractClass)Activator.CreateInstance(type);

您需要进行一些字符串修改,例如获取单词、添加处理器字符串并确保所有处理器都在同一个位置。

如果您确定该类型在当前程序集中,只需完全限定名称即可
 Activator.CreateInstance(Type.GetType("SomeProcessor"));

关于c# - 如何根据字符串动态调用类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com