问题描述
我有一个 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
}