【问题标题】:MEF Interface - Can I have optional voids?MEF 接口 - 我可以有可选的空隙吗?
【发布时间】:2020-12-19 10:49:37
【问题描述】:

我有一个 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 设为可选?

编辑:

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

【问题讨论】:

  • 如果一个接口包含一个成员,如果您希望该类型实现该接口,您必须将其添加到您的类型中。这只是普通的 C#,与 MEF 无关。如果您不希望它做任何事情,可以将其留空。
  • @LasseV.Karlsen 这在 C# 8 中不再适用,它具有默认接口方法
  • 是的,如果您可以控制界面。
  • @LasseV.Karlsen,我已经编辑了这个问题。接口是我的,所以我可以编辑接口,创建一个默认的空。使用 C# 8。有人可以举个例子吗?谢谢大家
  • @erikkallen 已经这样做了,注意接口中方法声明末尾的{ }

标签: c# owin mef


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-05-25
    • 2020-06-11
    • 2011-12-21
    • 1970-01-01
    • 2021-08-15
    • 2012-06-30
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    相关资源
    最近更新 更多