Доброе время суток.
Возникла проблема, прошу Вашей помощи.
История такова.
Мне надо динамически загрузить сборку, получить интерфейс для дальнейшей работы.
В упрощенном виде сборка такова
file1.cs
namespace ComService
{
public sealed class ComServiceFacade
{
public static IComServiceFactory GetIComServiceFactory()
{
return (IComServiceFactory)(new CComServiceFactory());
}
}
public interface IComServiceFactory
{
void zzz();
}
}
file2.cs
namespace ComService
{
internal sealed class CComServiceFactory : IComServiceFactory
{
public void zzz()
{
Console.WriteLine(this.GetType().ToString());
}
}
}
Client.cs
using ComService;
namespace CComConsoleTest
{
Assembly a = Assembly.LoadFile(@"G:\zzz\CCom\ComService\bin\Debug\ComService.dll");
Type facade = a.GetType("ComService.ComServiceFacade");
object facadeobj = Activator.CreateInstance(facade, true);
Type comfactorytype = a.GetType("ComService.CComServiceFactory");
Type icft = comfactorytype.GetInterface("ComService.IComServiceFactory");
IComServiceFactory tmpobject = (IComServiceFactory)(facade.InvokeMember("GetIComServiceFactory", BindingFlags.Default | BindingFlags.InvokeMethod, null, null, new object[] { }));
}
На последней строке вылетает исключение InvalidCastException.
Ни как не пойму где грабли. Если есть идеи, поделитесь пожалуйста.