C # Интерфейс, который должен быть реализован третьей стороной - PullRequest
0 голосов
/ 25 апреля 2018

Я разрабатываю API для сторонних пользователей и застрял:

API будет выглядеть следующим образом:

public interface IFoo
{
    Init(IComponent component);

    ...
}

Интерфейс должен быть реализован третьей стороной, но метод Init будет вызван нами. Моя проблема в том, что я передам им экземпляр IComponent, который они могут использовать в методе Init, но их не следует использовать где-либо еще.

Возможно ли выполнить такую ​​проверку во время выполнения, чтобы они не сохранили ее, или организовать каким-либо образом такое поведение, которое сделает невозможным использование этого экземпляра IComponent из метода Init?

1 Ответ

0 голосов
/ 25 апреля 2018

Я не думаю, что вы можете напрямую контролировать, как Init () реализован где-либо. Тем не менее, ваш IComponent может быть настолько хитрым, насколько это необходимо, выполнение чего-то вроде приведенного ниже кода сделает невозможным использование экземпляров плагинами после факта.

public interface IComponent
{
    void DoSomething();
}

class Component : IComponent
{
    bool flag;

    public DoSomething()
    {
        if( flag )
            throw new NotSupportedException( "Operation not supported anymore." );
        // Do something normal during Init().
    }

    internal void MarkCOmplete()
    {
        flag = true;
    }
}

....

void Initialize()
{
    var component = new Component();

    foreach(var plugin in plugins)
    {
        plugin.Init(component);
    }
    component.MarkComplete();
}
...