我在一段代码中有一个简单的插件系统。基本上,它接受一个继承自基类的Type,并在其上调用“CreateInstance”。然后我调用这个实例中的方法。超类存在于SDK DLL中,不包含特殊的逻辑/代码,只包含在插件制作时被覆盖的骨架方法。
我希望能够为插件开发人员提供一个名为“SystemLog”的对象,这将让他们编写日志输出。我的问题是,在创建实例时如何填充此对象,除非我使用get / set访问器将其公开?我希望它对插件开发人员是只读的,因为我不希望它们以某种方式覆盖它。
答案 0 :(得分:2)
我在这里看到两个问题:
让我从第二个开始。您可以声明类似
的内容public interface ISystemLogger
{
void log(String message);
}
在SystemLog之上实现简单的包装器(这个包装器的实例可以传递给插件)。所以插件只知道ISystemLoggger接口,而不是任何类型的实现
private sealed class SystemLoggerPluginWrapper : ISystemLogger
{
private readonly SystemLog inner;
public SystemLoggerPluginWrapper(SystemLog inner) {
this.inner = inner;
}
public void log(string message)
{
inner.log(message);
}
}