带有Interface参数的Activator.CreateInstance

时间:2016-07-06 08:02:33

标签: c# reflection interface abstract-class

我有一个Reflection方法,我加载一个具有特定名称的类的实例。我有一个抽象类来定义我的类。现在我在这个抽象类的构造函数中也有一个接口。这有点难以解释,我不确定它是否是解决问题的正确方法。但这是我的源代码,应该解释最多:

程序:

    private static void Main(string[] args)
    {
        int result;

        if (args.Length > 0)
        {
            string jobName = args[0];

            Type[] types = Assembly.GetAssembly(typeof(Task)).GetTypes();
            foreach (Type type in types)
            {
                if (type.Name == jobName)
                {
                    //Here is my problem. I need my Interface instead of null
                    _job = (Task)Activator.CreateInstance(type, null);
                }
            }

            if (_job != null)
            {
                result = _job.Run(args);
            }
        }

        //Dispose the Job
        _job = null;
    }

任务:

public abstract class Task
{
    public IArgument Argument;

    protected Task(IArgument argument)
    {
        Argument = argument;
    }

    public int Run(string[] args)
    {
        int result;

        if (SetArguments(args))
        {
            result = Work();
        }          
        return result;
    }

    protected abstract int Work();

接口:

public interface IArgument
{
    bool SetArguments(string[] args);
}

现在我可以创建一个"任务"上课和#34;论证"类:

public class ImportArgument : IArgument
{
    public bool SetArguments(string[] args)
    {
        return true;
    }
}

public class ImportTask : Task
{
    protected override int Work()
    {            
        return 1;
    }

    public ImportTask(IArgument argument) : base(argument)
    {
        Argument = new ArticleImportArgument();
    }
}

你们怎么想?有没有办法在构造函数中使用Interface创建任务类的实例?有没有其他方法可以解决这个问题?我还可以在我的Task类中创建一个抽象方法,我必须实现我的接口,但我认为构造函数是更好的方法。

0 个答案:

没有答案