#c# #oop #interface #com #autofac
#c# #ооп #интерфейс #com #autofac
Вопрос:
Стороннее программное обеспечение предоставило библиотеку под названием ProxyGW
Вот их код интерфейса
public interface ProxyGW : IProxyGW10, _ProxyGWEvents_Event
{
}
Вот интерфейс _ProxyGWEvents_Event
public interface _ProxyGWEvents_Event
{
event _ProxyGWEvents_onConnectSucceededEventHandler onConnectSucceeded;
}
Вот IProxyGW10
интерфейс, включает в себя 8,7,6 …. интерфейсы!
public interface IProxyGW10 : IProxyGW9
{}
Я использую Autofac
, чтобы получить возможность внедрения зависимостей. Я написал как класс ProxyGWModule
для регистрации компонента
using Autofac;
using ProxyGWLib;
public class ProxyGWModule: Module
{
protected override void Load(ContainerBuilder builder)
{
builder.Register(ProxyGW);// I get error here
}
}
Ошибка
‘ProxyGW’ — это тип, который недопустим в данном контексте ProxyGWModule.cs
Ошибка возникает, если мне нравится это
ProxyGW proxygw = new ProxyGW();
builder.RegisterInstance(proxygw).As<IProxyGW10>(); //which interface shall be part of
Это правильный путь? если да, то что происходит с _ProxyGWEvents_Event
интерфейсом? Я хочу иметь доступ ко всем событиям в _ProxyGWEvents_Event
Я попробовал, как показано ниже
builder.RegisterInstance(ProxyGWClass);
Ошибка
Тип взаимодействия ‘ProxyGWClass’ не может быть внедрен. Вместо этого используйте соответствующий интерфейс. ProxyGWModule.cs
Корневой класс похож на приведенный ниже. IProxyGW9, IProxyGW8 ….. являются разными версиями. Очевидно, что мы используем только один из них.
public class ProxyGWClass : IProxyGW10, ProxyGW, _ProxyGWEvents_Event, IProxyGW9, IProxyGW8, IProxyGW7, IProxyGW6, IProxyGW5, IProxyGW4, IProxyGW3, IProxyGW2 {}
Итак, ниже не отображается никакой ошибки
ProxyGW proxygw = new ProxyGW();
builder.RegisterInstance(proxygw).As<IProxyGW9>().As<_ProxyGWEvents_Event>();
Комментарии:
1. ProxyGW — это интерфейс. Вам нужен класс, который реализует этот интерфейс.
2. ProxyGWClass — это класс — я получаю эту ошибку — Тип взаимодействия ‘ProxyGWClass’ не может быть внедрен. Вместо этого используйте соответствующий интерфейс. ProxyGWModule.cs
3. О, это COM-интерфейс… для этого нужен Ханс Пассант.
4.
builder.RegisterInstance(proxygw).As<IProxyGW10>().As<_ProxyGWEvents_Event>();
5. да, это COM-интерфейс