Как вызвать методы внутреннего класса через интерфейс в DLL - PullRequest
0 голосов
/ 23 мая 2019

В моем проекте связывания Xamarin.iOS у меня есть следующий интерфейс, определенный в моем ApiDefinition.cs

[BaseType(typeof(LSMAHandler))]
[Protocol, Model]
interface LSMAHandlerRegister

Он сгенерировал LSMAHandlerRegister.g.cs в моем проекте / obj / Debug / ios / project. Этот файл содержит следующее

  1. открытый интерфейс ILSMAHandlerRegister: INativeObject, IDisposable, SightCallBinding.ILSMAHandler
  2. внутренний герметичный класс LSMAHandlerRegisterWrapper: BaseWrapper, ILSMAHandlerRegister
  3. публичный небезопасный абстрактный частичный класс LSMAHandlerRegister: LSMAHandler, ILSMAHandlerRegister

Я добавил сгенерированную DLL в мой проект xamarin.ios. Теперь я хочу вызвать метод RegisterWithURL в вышеприведенном классе. Но реализация этого метода доступна только во внутреннем классе оболочки. Как я могу вызвать этот метод в моем проекте Xamarin.iOS?

1 Ответ

1 голос
/ 23 мая 2019

Простой ответ - вы не можете. Внутренние классы не видны в dll. Хотя есть кое-что, что вы можете сделать.

Прежде всего подумайте, почему этот класс является внутренним. Там может быть важная причина для этого. Вещи, которые вы можете сделать (вы должны иметь доступ к этому проекту)

  • сделать класс и интерфейсы общедоступными (возможно, нет причин для его внутреннего использования)
  • use InternalsVisibleTo https://docs.microsoft.com/pl-pl/dotnet/api/system.runtime.compilerservices.internalsvisibletoattribute?view=netframework-4.8 - заметьте, однако, что это считается плохой практикой и не должно выполняться. Единственным исключением является тестовый проект. Вы можете показать внутренности для тестирования проекта. Иногда это может быть хорошо.

создать другой открытый класс, который использует этот внутренний, например:

public class MyPublicHelper
{
    public void CallMyInternalMethod()
    {
        MyInternalClass obj = new MyInternalClass();
        obj.MyInternalMethod();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...