【发布时间】: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 已经这样做了,注意接口中方法声明末尾的
{ }。