0

我在运行时加载一个 DLL。DLL 和主应用程序都使用一个 DLL,它拥有让程序知道如何使用 DLL 中的某些类型的接口。在主应用程序中有一个工厂类,当主应用程序请求它继承的接口时,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);
4

1 回答 1

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()在这里打电话。

于 2013-09-21T20:35:29.430 回答