如何动态地基于字符串调用类? - c#

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

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

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

我的处理器接口示例:

    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方法吗?以及为什么调用或DI?我知道这个问题是一个开放性问题,但是它在很多人的代码中经常发生,因此我想有一个独特的最佳实践。

参考方案

您可以使用以下内容

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

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

如果确定类型在当前程序集中,则只需使用此名称即可

 Activator.CreateInstance(Type.GetType("SomeProcessor"));

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…

您如何在列表内部调用一个字符串位置? - python

我一直在做迷宫游戏。我首先决定制作一个迷你教程。游戏开发才刚刚开始,现在我正在尝试使其向上发展。我正在尝试更改PlayerAre变量,但是它不起作用。我试过放在列表内和列表外。maze = ["o","*","*","*","*","*",…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …