我必须开发一种大软"和较小的" satellite-Adapter" 服务(远程),大软可以调用。
每个" satellite-Adapter" 实现相同的方法
我需要的是从大软件提供一个契约接口(method_names,对象作为参数发送,对象作为返回接收)每个"卫星 - 适配器" 服务默认实施,以便被大软件调用。这样我可能只开发一次大软件,并可以添加新适配器作为插件。
同时调用之后开发的新适配器应该只是URI更改。
问题:
答案 0 :(得分:2)
您使用interface
定义合约:
public interface IMyContract {
// Methods, properties, etc. that the contract needs defined
}
您的不同“卫星适配器”服务以这种方式实施合同:
public class MySuperDuperService : IMyContract {
// Properties & methods particular to what this service does.
// You must provide an implementation for every property & method defined by IMyContract in here, too.
}
您的“大软”程序可以有一个属性或多个属性,这些属性包含对实现interface
的类的实例的引用,或者它可以具有传递对实现的对象的引用的方法服务:
public class BigSoft {
public IMyContract SatelliteAdapter { get; set; }
public void DoSomething( IMyContract adapter ) {
// code here
}
}
等等。通过这种方式,BigSoft
并不了解每个服务的功能,但它可以使用其中的任何一个,因为它希望每个服务具有相同的方法和优点。属性,他们这样做。编译器不会构建可执行文件,直到所有属性和& IMyContract interface
中定义的方法在每个卫星适配器类中定义。
您应该知道的另一件事:一个类只能从一个类下降,但它可以实现您想要的所有接口。也就是说,
public class MyService : ServiceBase, IMyContract1, IMyContract2 { . . . }
仅在以下情况下完全合法:
一个常见的惯例是使用大写“I”作为所有interfaces
的第一个字母,这就是我在示例中所做的,所以你可以查看代码和&知道ServiceBase
必须是一个类,其他两个必须是interfaces
。此外,如果要从现有类下降新类,则超类名必须在列表中的第一位。