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

Компонент установки MvcContrib Windsor с параметром

Я использую библиотеку MvcContrib с Castle Windsor, и у меня возникла проблема с установкой параметра при регистрации компонента.

У меня есть следующие интерфейсы для классов, которые обертывают DataContext. Я хочу иметь возможность указать, какой DataContext использовать для разных служб, потому что я подключаюсь к нескольким базам данных для получения данных.

public interface IDataContext
{
    DataContext Context { get; }
}

public interface IReportingDC : IDataContext
{
}

public class Repository<T> : IRepository<T> where T : class
{

открытый IDataContext DC {получить; набор; }

  public Repository(IDataContext dataContext)
  {
    DC = dataContext;
  }
}

Вот строки регистрации из моего global.asax.cs.

container.AddComponentLifeStyle<IDataContext, MainDataContext>(Castle.Core.LifestyleType.PerWebRequest);

container.AddComponentLifeStyle<IReportingDC, ReportingDC>(Castle.Core.LifestyleType.PerWebRequest);

container.Register(Component.For<IRepository<ReportingTotals>>()
.ImplementedBy<Repository<ReportingTotals>>()
.Parameters(Parameter.ForKey("dataContext").Eq("IReportingDC"))
.LifeStyle.PerWebRequest
);

Когда я пытаюсь загрузить страницу, я получаю следующую ошибку.

«Ключ недействителен для параметра dataContext. Таким образом, ядру не удалось переопределить зависимость службы»


  • пожалуйста, исправьте форматирование кода 24.02.2010

Ответы:


1

Назовите свой компонент и используйте ServiceOverrides вместо параметров:

Component.For<IReportingDC>()
         .ImplementedBy<ReportingDC>()
         .Named("IReporting")
         .LifeStyle.PerWebRequest

и

Component.For<IRepository<ReportingTotals>>()
         .ImplementedBy<Repository<ReportingTotals>>()
         .ServiceOverrides(ServiceOverride.ForKey("dataContext").Eq("IReporting"))

Для справки см. документы по Fluent API.

24.02.2010
  • Спасибо, я только что нашел это и заставил его работать, поэтому я рад, что вы подтвердили это для меня. 24.02.2010
  • Новые материалы

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

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

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

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

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

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

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