我試圖實現類似於我想用下圖(問題的結尾)顯示的想法。C#如何「註冊」類「插件」到服務類?
全部編碼從abstract class Base
直到DoSomething
類。
我的「服務」需要向消費者提供服務已經「註冊」的類型「DoSomethings」的「動作」,在這一點上,我看到我的自己正在重複(複製/粘貼)以下邏輯服務類:
public async Task<Obj1<XXXX>> DoSomething1(....params....)
{
var action = new DoSomething1(contructParams);
return await action.Go(....params....);
}
我想知道是否有無論如何在C#中「註冊」所有「DoSomething的」我要以不同的方式?更有活力,更「複製/粘貼」的東西,同時爲我的消費者階層提供「智能感知」。某種「注入」該服務接受的「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...);
而且我想,當我使用「CarService」提供智能感知....
結論:目標是如何在每個服務中「登記」他提供的方法,通過給出「DoSomethingX」列表,並自動將它們作爲「方法」提供......我希望我能夠解釋我的目標/ 希望 。
換句話說:我只是想能夠說,我Service1
類是「提供」行爲DoSomething1, DoSomething2
和DoSomething3
,但與最低線成爲可能。不知怎的,使用類的概念屬性,在那裏我可以做類似這樣的東西:
// THEORETICAL CODE
[RegisterAction(typeOf(DoSomething1))]
[RegisterAction(typeOf(DoSomething2))]
[RegisterAction(typeOf(DoSomething3))]
public class Service1{
// NO NEED OF EXTRA LINES....
}
你是否檢查過任何現有的插件框架,包括.NET自己的MEF?還是IoC容器?此外,當你有lambda時,你不需要繼承。您可以擺脫整個層次結構,並讓每個插件創建一個包含Do1,Do2'Func>屬性的PluginAction類。 –
@PanagiotisKanavos還沒有,我會看看MEF,謝謝你指出。 – Dryadwoods
http://softwareengineering.stackexchange.com/可能更適合這個問題。參照其他網站時 – nvoigt