Как получить доступ к зарегистрированным компонентам из задачи запуска реализации пользовательской функции NServiceBus 6

У меня есть собственная реализация функции NServiceBus, которая использует задачу запуска функции.

Вот метод установки функции

protected override void Setup(FeatureConfigurationContext context)
    {
        context.Container.ConfigureComponent<GridFsDataBus>(DependencyLifecycle.SingleInstance);
        context.Container.ConfigureComponent<GridFsDataBusCleaner>(DependencyLifecycle.InstancePerCall);
        context.RegisterStartupTask(() => new MongoDbDataBusCleaner());
    }

Я не могу найти способ получить доступ к каким-либо зарегистрированным компонентам (не только зарегистрированным моим) из самой задачи, так как подпись регистрации задачи в NServiceBus 6 изменилась и вынуждает вас создавать экземпляр задачи самостоятельно.

Вот фрагмент задачи

 class MongoDbDataBusCleaner : FeatureStartupTask, IDisposable
    {
        static readonly ILog Logger = LogManager.GetLogger(typeof(MongoDbDataBusCleaner));

        public IMongoDatabase Database { get; set; }
        public GridFsDataBusCleaner DataBusCleaner { get; set; }
        public ReadOnlySettings Settings { get; set; }

        protected override Task OnStart(IMessageSession session)
        {
         // all the class properties are null
         // how to get components registered in container

Единственное, что я могу получить, находясь в методе OnStart, это IMessageSession, в котором отсутствует доступ к любому контейнеру.

Внедрение свойства по умолчанию не работает, так как мне пришлось создавать задачу запуска самостоятельно

Любая помощь будет оценена!

Я нашел, как это сделать. Все, что вам нужно сделать, это использовать метод, принимающий параметр построителя NServiceBus, в методе настройки функций при создании задачи запуска.

  context.RegisterStartupTask((builder =>
          {
            var database = builder.Build<IMongoDatabase>();
            var dataBusCleaner = builder.Build<GridFsDataBusCleaner>();
            var settings = builder.Build<ReadOnlySettings>();

            return new MongoDbDataBusCleaner(database, dataBusCleaner,    settings);
        }));

0 ответов

Другие вопросы по тегам