繁体   English   中英

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

[英]Using dynamic in C# without referencing a DLL

我想在C#中使用动态与外部API(DLL)中定义的对象进行交互。 这样,我不想在控制台应用程序中引用该API。 这可行吗?

例如,我使用以下内容:

dynamic obj1 = new ObjectDefinedInAPI();

编译器一直在that

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源代码,则无济于事。 这样做的好处是您将获得Intellisense,并将始终确保动态类与应用程序良好地接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM