抽象类可以用作“主机”和“插件”之间的合同对象吗?这个想法是插件继承了合同(我们称之为适配器)。我们也理解框架中的所有参与者都必须继承MarshalByRefObject
(MBRO)。所以,这就是我们的想法——
主持人:
class Host : MarshalByRefObject
{
}
合同:
public abstract class PluginAdapter : MarshalByRefObject
{
}
插件:
class myPlugin : PluginAdapter
{
}
这三个都存在于单独的 asm 中。我们的Host会为每个插件创建一个新的AppDomain,PluginAdapter的创建如下:
{
ObjectHandle instHandle = Activator.CreateInstance(
newDomain, data.Assembly.FullName, data.EntryPoint.FullName);
PluginAdapter adapter = (PluginAdapter)instHandle.Unwrap();
}
编辑:data
的具体类型在哪里myPlugin
?
我们想知道这个框架的实现是否可行。我们已经看到使用接口(IPlugin)进行插件派生的文章,以及使用具体类作为契约的文章。那些文章也会说可以使用抽象类,但没有给出该实现的示例。是否要求合同是一个具体的类?
编辑:在 Richard Blewett 的这个例子中 - C# Reflection - 他使用了一个更简单的实现:
合同:
public interface IPlugIn
{
// do stuff
}
插件:
public class PlugIn : MarshalByRefObject, IPlugIn
{
}
现在,如果使用抽象类作为合约,插件不能同时继承合约和 MBRO。那么,什么成为可扩展插件框架的最佳实现。即使最初我们正在为单机操作进行开发,我们是否应该继续实施远程处理?该项目预计将分布在网络上,也可能分布在 Internet 上。我们只是还没有实现 Tcp,因为我们正试图让插件框架的基础知识得到充分理解和操作。
使用环回在单台机器上实现 Tcp 远程处理有意义吗?