Я пытаюсь реализовать что-то вроде идеи, которую я пытаюсь показать со следующей диаграммой (конец вопроса).
Все кодируется из классов abstract class Base
до DoSomething
.
Мой "Сервис" должен предоставить потребительским "действиям" типа "DoSomethings", которые служба "зарегистрировала", на этом этапе я вижу себя как повторение (копирование/вставку) следующей логики на класс обслуживания:
public async Task<Obj1<XXXX>> DoSomething1(....params....)
{
var action = new DoSomething1(contructParams);
return await action.Go(....params....);
}
Я хотел бы знать , если в С# есть все, чтобы "зарегистрировать" все "DoSomething", которые я хочу по-другому? Что-то более динамичное и менее "копировать/вставлять" и на в то же время предоставляете мне "intellisense" в моем классе потребителей? Somekind "вводит" список принятых "DoSomething" для этой службы.
Update # 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...);
И я хочу предложить intellisense, когда я использую "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....
}