我想在c#中使用动态与外部API (DLL)中定义的对象进行交互。以这种方式,我不想在我的控制台应用程序中引用API。这可行吗?
例如:
dynamic obj1 = new ObjectDefinedInAPI();
编译器一直在唠叨
The type or namespace name 'objectDefinedInAPI' could not be found ...
任何想法?
谢谢
您可以手动加载程序集,然后在知道程序集名称和类名称的情况下创建类的实例。
var assembly = Assembly.LoadFrom("filepath");
var aClass = assembly.GetType("NameSpace.AClass");
dynamic instance = Activator.CreateInstance(aClass);
除了NeutronCode的答案,您还可以尝试以下方法:
public interface IDynamicService {
void DoSomething();
}
public void static main() {
var assembly = Assembly.LoadFrom("filepath");
var aClass = assembly.GetType("NameSpace.AClass");
IDynamicService instance = Activator.CreateInstance(aClass) as IDynamicService;
if (instance != null) {
instance.DoSomething();
}
}
这样你可以确保你的类型有一个特定的实现。请注意,实际的类必须继承接口才能工作,所以如果您无法访问其他dll源代码,这将没有多大帮助。这样做的好处是,您可以获得智能感知,并始终确保您的动态类与应用程序的接口良好。