我想在C#中使用dynamic来与外部API(DLL)中定义的对象进行交互。以这种方式,我不想在我的控制台应用程序中引用API。这可行吗?
例如,我使用了以下内容:
dynamic obj1 = new ObjectDefinedInAPI();
编译器继续唠叨
The type or namespace name 'objectDefinedInAPI' could not be found ...
有什么想法吗?
由于
答案 0 :(得分:3)
您可以手动加载程序集,然后在知道程序集名称和类名的情况下创建类的实例。
var assembly = Assembly.LoadFrom("filepath");
var aClass = assembly.GetType("NameSpace.AClass");
dynamic instance = Activator.CreateInstance(aClass);
答案 1 :(得分:0)
除了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源代码,这将无济于事。这样做的好处是你可以获得Intellisense,并且始终确保您的动态类与您的应用程序良好接口。