Как внедрить объекты взаимодействия из сторонней библиотеки с помощью «Autofac»

#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-интерфейс