Как получить доступ к зарегистрированным компонентам из задачи запуска реализации пользовательской функции 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);
}));