MEF 接口 - 我可以有可选的空隙吗?

问题描述

我有一个 C# 自托管 Web API,在某些时候需要使用插件进行扩展。 我创建了一个接口:

[InheritedExport]
public interface IMyPlugin
{
    void OnStart();
    void OnEnd();
}

在我的插件中:

[Export(typeof(AnotherTYpe))]
[ExportMetadata("displayName","My Plugin")]
[ExportMetadata("Description","blabla")]
[ExportMetadata("Version","1.0")]
public class ServiceTasks : IMyPlugin
{
    [Import("IMyPlugin",typeof(IMyPlugin))]
    public IHost Host { get; set; }

    public void OnStart()
    {

    }


    public void OnEnd()
    {

    }
    
}

但我想要的只是在我的插件中创建“OnStart”void,我不需要在这插件中使用 OnEnd void,是否可以在没有这个 void 的情况下编写插件

如果我删除它,它会显示一个错误,说它没有实现接口成员 OnEnd。

是否可以在插件中将 void 设为可选?

编辑:

界面是我的,我可以把界面中的成员分开,这样用户就可以为一个成员制作插件了。但是如果我可以设置认值,我可以在同一个界面中加入成员。如何设置认值并且认为空?

解决方法

您可以添加方法的空默认实现。

public interface IMyPlugin
{
    public void OnStart() {}
    public void OnEnd() {}
}

public class MyPlugin : IMyPlugin
{
    public void OnStart() { Console.WriteLine("OnStart"); }
    // no OnEnd required
}