Получение интерфейса из динамически загруженной сборки
От: Владимир_  
Дата: 08.06.11 08:47
Оценка:
Доброе время суток.
Возникла проблема, прошу Вашей помощи.
История такова.
Мне надо динамически загрузить сборку, получить интерфейс для дальнейшей работы.

В упрощенном виде сборка такова
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.
Ни как не пойму где грабли. Если есть идеи, поделитесь пожалуйста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.