在c#中使用动态而不引用DLL



我想在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源代码,这将没有多大帮助。这样做的好处是,您可以获得智能感知,并始终确保您的动态类与应用程序的接口良好。

相关内容

  • 没有找到相关文章

最新更新