Как получить доступ к методу контроллера из службы в ядре ASP.NET без дублирования логики? [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как получить доступ к методу контроллера из службы в ядре ASP.NET без дублирования логики? [закрыто]

Сообщение Anonymous »

Я работаю над приложением MVC Core ASP.NET. Я хочу использовать ту же логику внутри сервиса, но я не уверен, как сделать это чисто без дублирования кода или нарушения принципов конструкции ASP.NET. < /P>

Код: Выделить всё

BaseController
:

Код: Выделить всё

public class BaseController : Controller
{
protected string GetMetadataValue(MyItem item, string key)
{
if (item == null || item.Metadata == null)
return string.Empty;

var param = item.Metadata.FirstOrDefault(p => p.Key == key);
return param?.Value ?? string.Empty;
}
}
< /code>
MyItem
Класс модели:

Код: Выделить всё

public class MyItem
{
public int Id { get; set; }
public List Metadata { get; set; }
}

public class MetaParam
{
public string Key { get; set; }
public string Value { get; set; }
}
< /code>
MyController
:

Код: Выделить всё

public class MyController : BaseController
{
private readonly MyService _service;
private readonly ItemRepository _repository;

public MyController(MyService service, ItemRepository repository)
{
_service = service;
_repository = repository;
}

public async Task Process(int id)
{
var item = await _repository.GetItemByIdAsync(id);

// 👇 Controller method call
var taskType = GetMetadataValue(item, "TaskType");

// 👇 Pass result to the service
await _service.ProcessItemAsync(item, taskType);

return Ok();
}
}
< /code>
MyService
:
Что я хочу: вместо того, чтобы вызовать getMetAdatavalue в контроллере и передачу TaskType , я хочу напрямую вызвать метод контроллера внутри службы.

Код: Выделить всё

public class MyService
{
public async Task ProcessItemAsync(MyItem item, string taskType)
{
// ❗ I want to do this directly here (but GetMetadataValue is in controller):
// var taskType = GetMetadataValue(item, "TaskType");

if (taskType == "URGENT")
{
// handle urgent logic
}

await Task.CompletedTask;
}
}
< /code>
[b]Constraints[/b]

[*]I cannot move GetMetadataValue
к классу утилиты (ограничение Legacy/Shared Logic)

[*] Я не могу дублировать логику внутри службы (код не разрешен)

Я не могу внедрить контроллер в услугу (навязает принципы di). /> < /ul>
мои вопросы < /strong> < /p>

Есть ли в ядре ASP.NET в ядре ASP.NET, как GetMetAdatavalue < /code, есть как с учетом, так и в Comeer Shiper, так и в сфере. Слои? В большом существующем проекте, поэтому вы не можете реструктурировать или перемещать логику - вы просто хотите повторно использовать логику метода контроллера без разрыва дизайна или дублирования. < /p>
Этот проект уже большой и реализованный. SO:

Я не могу рефакторировать или перемещать метод GetMetAdatavalue из контроллера.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ut-duplica
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Размещение логики ввода и логики обработки в C ++ [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как сделать запрос PUT из ядра ASP.NET mvc в веб-API в ядре asp.net?
    Anonymous » » в форуме C#
    0 Ответы
    95 Просмотры
    Последнее сообщение Anonymous
  • EF Core View — размещение логики бизнес-логики
    Anonymous » » в форуме C#
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Как я могу получить доступ к методу избирателя внутри службы
    Anonymous » » в форуме Php
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Невозможно получить доступ к данным формы в ядре ASP.NET
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»