C#接口需要由第三方实现

时间:2018-04-25 05:35:46

标签: c# interface api-design

我正在为第三方用户开发API,但我被困住了:

API将如下所示:

public interface IFoo
{
    Init(IComponent component);

    ...
}

接口需要由第三方实现,但我们会调用Init方法。我的问题是我将一个IComponent实例传递给它们,它们可以在Init方法中使用,但它们不应该在其他任何地方使用。

是否有可能进行这样的运行时检查,他们没有保存它,或者以某种方式组织这种行为会导致无法在Init方法中使用该IComponent实例?

1 个答案:

答案 0 :(得分:3)

我认为你不能直接控制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();
}