我正在运行时加载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);
答案 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()
。