为什么不能让Activator.CreateInstance找到构造函数?

时间:2013-09-21 19:13:00

标签: c# activator

我正在运行时加载DLL。 DLL和主应用程序都使用DLL保存接口,让程序知道如何使用DLL中的某些类型。在主应用程序中有一个Factory类,当主应用程序请求它继承的接口时,Dll可以设置其中一个对象类型。下面是从DLL创建对象类型的函数的条带化(主要是删除的错误处理代码)版本。当这个被调用时,我得到一个异常,说没有为这个对象定义无参数构造函数。我不知道为什么因为它们都有无参数构造函数。

    //inside the DLL
    Factory.ResovleType<ISomething>(typeof(SomethingCool));

    //inside the main application
    ISomething obj = Factory.CreateObject<ISomething>();


    //inside the Factory Class
    public static T CreateObject<T>(params object[] args) 
    {
        T obj = (T)Activator.CreateInstance(resovledList[typeof(T)], args);

        return obj;
    }

    public static void ResolveType<T>(Type type)
    {
          resovledList.Add(typeof(T), type);

1 个答案:

答案 0 :(得分:2)

来自评论:

resovledList[typeof(T)]找到的类型不是预期的类型。相反,它是RuntimeType。这可能是调用ResolveType<ISomething>(typeof(Something).GetType())而不是ResolveType<ISomething>(typeof(Something))

的结果

typeof(Something)Type类型的值(实际为RuntimeType,来自Type),因此调用typeof(Something).GetType()会为您typeof(RuntimeType)

事实证明,您实际上是在其他地方调用GetType(),但问题和解决方案是相同的:您不应在此处致电GetType()