在C#中使用dynamic而不引用DLL

时间:2014-05-19 12:49:00

标签: c# c#-4.0 dynamic reflection

我想在C#中使用dynamic来与外部API(DLL)中定义的对象进行交互。以这种方式,我不想在我的控制台应用程序中引用API。这可行吗?

例如,我使用了以下内容:

dynamic obj1 = new ObjectDefinedInAPI();

编译器继续唠叨

The type or namespace name 'objectDefinedInAPI' could not be found ...

有什么想法吗?

由于

2 个答案:

答案 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,并且始终确保您的动态类与您的应用程序良好接口。