Nano Hash - криптовалюты, майнинг, программирование

Инициализировать службу в конструкторе контроллера

Я хотел бы использовать autofac IoC для инициализации моей службы, которая внедряется в конструктор контроллера MVC. Предположим, что интерфейс сервиса выглядит так:

 public interface IService
{
    void SetValidationContainer(IReadOnlyDictionary<string, ModelStateEntry>  validations);
}

И контроллер контроллера:

 public class HelloWorldController : Controller
{
    private readonly IService _service;
    public HelloWorldController(IService service)
    {
        _service = service;
        _service.SetValidationContainer(ModelState);
    }
}

Можно ли переместить вызов «SetValidationContainer(ModelState)» в конфигурацию DI? И используйте что-то вроде этого:

  container.Register<IService>
            .As<ServiceImplementaion>
            .AfterInjectedInto<Controller>
            .Call(service, controller => service.SetValidationContainer(controller.ModelState));

Ответы:


1

Autofac предоставляет 3 события.

  • OnActivating : поднимается перед использованием компонента
  • OnActivated : поднимается, когда компонент полностью построен
  • OnRelease : возникает, когда компонент удаляется

В вашем случае вы можете использовать OnActivated для инициализации вашего компонента.

builder.RegisterType<Service>()
       .As<IService>()
       .OnActivating(e => e.Instance.Initialize()); 

Ознакомьтесь с документацией по Autofac событиям Lifetime. Чтобы получить больше информации

08.07.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..