Использование родительского объекта в OnActivation () в качестве аргумента - PullRequest
0 голосов
/ 01 июня 2018

У меня есть компонент, который я добавляю с помощью Ninject, и в нем есть функция-член, которую необходимо вызывать после ее создания.Я не поместил его в конструктор, потому что он требует ссылки на его родительский объект, и это создаст циклическую ссылку.

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

Из-за отсутствия документации я возился с OnActivation, но, похоже, не могузаставить его работать.

В основном я хотел бы сделать следующее:

    Bind<IMessageService>().To<QueuedMessageService>().InSingletonScope()
        .OnActivation((ctx, svc) => { svc.SubscribeAll(ctx.Request.Target); });

где SubscribeAll(object target)

Я даже на правильном пути или я ухожув левом поле?Спасибо!

1 Ответ

0 голосов
/ 01 июня 2018

Вы можете использовать IInitializable интерфейс:

public class Parent : Ninject.IInitializable
{
    private readonly IMessageService service;

    public Parent(IMessageService service)
    {
        this.service = service;
    }

    public void Initialize()
    {
        service.SubscribeAll(this);
    }
}

Метод инициализации будет вызываться автоматически ninject.

...