【发布时间】:2013-08-26 09:45:13
【问题描述】:
有两个dll,即 一)lib1 b) 库2 这两个库是使用反射加载的(相对于在 Visual Studio 中添加直接引用)。我正在创建一个类的对象,然后想将该对象类型转换为接口的类型(接口在主程序中加载的 dll 中)。我收到一条错误消息,说类型不匹配。此问题的任何可能解决方案。
这是我的代码块:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Interfaceconversion
{
class Program
{
public static object classobj;
public static object interfaceobj;
static void Main(string[] args)
{
// Loading assembley 1
Assembly assembly1 = Assembly.LoadFrom(@"D:\WCFService\Aug9\Interfaceconversion\Lib1\bin\Debug\Lib1.dll");
Type[] type1 = assembly1.GetTypes();
foreach (Type item in type1)
{
if (item.FullName.ToString() == "Lib1.Class1")
{
classobj = Activator.CreateInstance(item);
}
}
// Loading assembly 2
Assembly assembly2 = Assembly.LoadFrom(@"D:\WCFService\Aug9\Interfaceconversion\Lib2\bin\Debug\Lib2.dll");
Type[] type2 = assembly2.GetTypes();
Type libtype = type2[1];
foreach (Type item in type2)
{
if (item.FullName.ToString() == "Lib2.Ilib2Interface1")
{
TODO: cast the object "classobj " to type Lib2.Ilib2Interface1
interfaceobj = classobj as item ;
}
}
#region old code
}
}
Lib2 dll 的代码是: 库2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lib2
{
interface Ilib2Interface1
{
void lib2disp1();
}
}
Lib1 代码是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lib1
{
interface ISttutil
{
void displayutil1();
void displayutil2();
}
interface Isttinterface
{
void displayinterface1();
void displayinterface2();
}
}
【问题讨论】:
-
您使用哪种方法加载程序集?我记得其中一个有问题。
-
Lib1.Class1是否实现了Lib2.Ilib2Interface1? -
@WinSharp93 我正在使用 Assembly.LoadFrom() 方法来加载程序集。
-
Ummm...尝试投射它有什么意义?转换几乎 需要 具有对类型的编译时引用。尝试转换为运行时类型几乎没有(任何?)应用程序。也许你应该在这里解释你的最终目标是什么。编辑:更不用说
Class1,来自你的代码没有实现接口,所以任何演员都会失败。我不确定你想在这里实现什么。
标签: c# reflection