在我编写的一段代码中,我有一个简单的插件系统。基本上,它接受一个继承自基类的类型,并在其上调用“CreateInstance”。然后我调用这个实例中的方法。超类存在于 SDK DLL 中,不包含特殊的逻辑/代码,只是在制作插件时被覆盖的骨架方法。
我希望能够为插件开发人员提供一个名为“SystemLog”的对象,这将使他们能够编写日志输出。我的问题是,我如何在创建实例时填充此对象,除非我使用 get/set 访问器将其公开?我希望它对插件开发人员是只读的,因为我不希望他们以某种方式覆盖它。
在我编写的一段代码中,我有一个简单的插件系统。基本上,它接受一个继承自基类的类型,并在其上调用“CreateInstance”。然后我调用这个实例中的方法。超类存在于 SDK DLL 中,不包含特殊的逻辑/代码,只是在制作插件时被覆盖的骨架方法。
我希望能够为插件开发人员提供一个名为“SystemLog”的对象,这将使他们能够编写日志输出。我的问题是,我如何在创建实例时填充此对象,除非我使用 get/set 访问器将其公开?我希望它对插件开发人员是只读的,因为我不希望他们以某种方式覆盖它。
我在这里看到两个问题:
让我从第二个开始。您可以声明类似
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);
}
}