У меня есть DLL, которую я хочу загрузить во время выполнения. Я использую Assembly.Load (byte []) и .CreateInstance() загруженной сборки.Assembly.CreateInstance(): как реализовать реализацию интерфейса
В этой сборке, у меня есть интерфейс IAnimal и корова, которая реализует этот интерфейс:
namespace DynamicLoading
{
public class Cow : IAnimal
{
public string GetName()
{
return "This is cow";
}
}
public interface IAnimal
{
string GetName();
}
}
я использую консольное приложение для testload это:
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 (который я создал как в своем тестовом проекте, так и в проекте dll). Корова из dll не хочет, чтобы ее отливали от IAnimal из тестового класса.
Как мне вызвать методы на корову, такие как GetName()?
Приветствия ребята!
Где находится 'IAnimal'? –
, так что вы получаете ошибку на этой строке «var newCow = cow.CreateInstance (« DynamicLoading.Cow », false) как IAnimal;» ? –
@RogerLipscombe Как вы можете видеть, он определяется как в тестовом приложении, так и в библиотеке классов. – Recipe