Код: Выделить всё
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
[*] Я не могу дублировать логику внутри службы (код не разрешен)
Я не могу внедрить контроллер в услугу (навязает принципы di). /> < /ul>
мои вопросы < /strong> < /p>
Есть ли в ядре ASP.NET в ядре ASP.NET, как GetMetAdatavalue < /code, есть как с учетом, так и в Comeer Shiper, так и в сфере. Слои? В большом существующем проекте, поэтому вы не можете реструктурировать или перемещать логику - вы просто хотите повторно использовать логику метода контроллера без разрыва дизайна или дублирования. < /p>
Этот проект уже большой и реализованный. SO:
Я не могу рефакторировать или перемещать метод GetMetAdatavalue из контроллера.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... ut-duplica