gpt4 book ai didi

c# - 程序集.CreateInstance() : how to enforce Interface implementation

转载 作者:太空宇宙 更新时间:2023-11-03 18:32:10 24 4
gpt4 key购买 nike

我有一个要在运行时加载的 dll。我使用加载程序集的 Assembly.Load(byte[]) 和 .CreateInstance()。

在此程序集中,我有一个 IAnimal 接口(interface)和一个实现此接口(interface)的 Cow:

namespace DynamicLoading
{
public class Cow : IAnimal
{
public string GetName()
{
return "This is cow";
}
}

public interface IAnimal
{
string GetName();
}
}

我使用控制台应用程序对此进行测试:

namespace DynamicLoading
{
class Program
{
static void Main(string[] args)
{
byte[] assemblyStream = System.IO.File.ReadAllBytes(@"C:\Cow\Cow.dll");

var cow = Assembly.Load(assemblyStream);

//Returns null: it is not able to cast from Cow to IAnimal
var newCow = cow.CreateInstance("DynamicLoading.Cow", false) as IAnimal;

Console.WriteLine(newCow.GetName());

Console.ReadLine();
}
}

public interface IAnimal
{
string GetName();
}
}

我可以很好地实例化 Cow 的新实例,但我似乎无法强制执行 IAnimal 接口(interface)(我在测试项目和 dll 项目中都创建了该接口(interface))。 dll 中的 Cow 不想从测试类中转换为 IAnimal。

如何调用 Cow 上的方法,例如 GetName()?

大家好!

最佳答案

Cow.dll 中的界面与其他程序集中的界面不同。 不管是否是同一命名空间中具有相同名称的同一接口(interface)。

您需要做的是在“公共(public)”位置定义接口(interface),Cow.dll 和您的程序集都可见:

- Animals.Common.Dll
- interface IAnimal

- Animals.Cow.Dll
- References
- Animals.Common.Dll
- class Cow: IAnimal

- Animals.Main.exe (Console Application)
- References
- Animals.Common.Dll
- class Program

关于c# - 程序集.CreateInstance() : how to enforce Interface implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20763613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com