Dry*_*ods 11 .net c# design-patterns
我正在尝试使用下图(问题的结尾)实现类似于我想要展示的想法.
一切都是从课程开始编码abstract class Base的DoSomething.
我的"服务"需要向消费者提供服务已"注册"的"DoSomethings"类型的"动作",此时我看到自己在服务类上重复(复制/粘贴)以下逻辑:
public async Task<Obj1<XXXX>> DoSomething1(....params....)
{
var action = new DoSomething1(contructParams);
return await action.Go(....params....);
}
Run Code Online (Sandbox Code Playgroud)
我想知道C#中是否还有以不同方式"注册"我想要的所有"DoSomething"?更动态,更少"复制/粘贴",同时在我的消费者类中提供"intellisense"?Somekind为该服务"注入"已接受的"DoSomething"列表.
更新#1 在阅读PanagiotisKanavos关于MEF和检查IoC的其他选项的消息后,我无法找到我正在寻找的确切内容.
我的目标是让我的Service1类(和所有类似的)表现得像一个DynamicObject但是接受的方法是在它自己的构造函数上定义的(我在其中指定DoSomethingX我提供的方法调用.)
示例:我有几个操作(DoSomethingX)作为"BuyCar","SellCar","ChangeOil","StartEngine"等....现在,我想创建一个服务"CarService",只应该提供动作"StartEngine "和"SellCar",而我可能还有其他"服务"与"行动"的其他组合.我想在每个服务的构造函数中定义这个逻辑.然后,在消费者类中,我只想做类似的事情:
var myCarService = new CarService(...paramsX...);
var res1 = myCarService.StartEngine(...paramsY...);
var res2 = myCarService.SellCar(...paramsZ...);
Run Code Online (Sandbox Code Playgroud)
当我使用"CarService"时,我想提供intellisense ....
总结:目标是如何在每个服务中"注册"哪些方法由他提供,给出一个"DoSomethingX"列表,并自动提供它们作为"方法"......我希望我能够解释我的客观/ 愿望.
换句话说:我只是想能够说,我的课Service1是"提供"的行动DoSomething1, DoSomething2和DoSomething3,但与最低线成为可能.不知何故使用类属性的概念,我可以在这里做类似的事情:
// THEORETICAL CODE
[RegisterAction(typeOf(DoSomething1))]
[RegisterAction(typeOf(DoSomething2))]
[RegisterAction(typeOf(DoSomething3))]
public class Service1{
// NO NEED OF EXTRA LINES....
}
Run Code Online (Sandbox Code Playgroud)
对我来说,MEF/MAF 确实是解决此类问题时可能最后做的事情。第一步是制定您的设计。我会做以下事情:
实现装饰器设计模式(或您选择的类似结构模式)。我选择装饰器,因为它看起来像您想要的,通过使用这些类中未定义的共享功能来补充某些类(即在您的示例中似乎更喜欢组合而不是继承)。请参阅此处http://www.dofactory.com/net/decorator-design-pattern
验证步骤 1 POC,以确定如果将其作为单独的 dll 添加(即通过在构建时烘焙不同的 CSProj),它是否会执行您想要的操作。
评估 MEF 或 MAF 是否适合您(取决于您想要的重量)。将这些技术与微服务等其他技术进行比较(这将从哲学上改变您当前的方法)。
实施您选择的热插拔(根据您提供的信息,MEF 可能是最合乎逻辑的)。