如何解决 Ninject.OnActivation 中的其他依赖项?

How Can I Resolve Other Dependencies within Ninject .OnActivation?

我正在使用 Ninject 为 class 设置绑定,它是 IObservable

我已经设置了一个重新绑定以确保 IObservable 有它的 IObserver 订阅如下...

kernel.Rebind<IAddressRepository>().To<AddressRepository>().InRequestScope()
                .OnActivation(repo => repo
                    .Subscribe(new SyncTrackerDataEventObserver<Address, AddressRepository>()));

这似乎工作正常,但实际上并不理想。 SyncTrackerDataEventObserver 会,当它不仅仅是一个存根时,它会拥有自己的依赖项。然后我们得到这个...

kernel.Rebind<IAddressRepository>().To<AddressRepository>().InRequestScope()
                .OnActivation(repo => repo
                    .Subscribe(new SyncTrackerDataEventObserver<Address, AddressRepository>(new SyncTrackerRepository(new SyncDataSource))));

哎哟!!

此时我想做的是利用现有的绑定。我希望能够写出这样的东西(但这只是编造的..)

kernel.Rebind<IAddressRepository>().To<AddressRepository>().InRequestScope()
                .OnActivation(repo => repo
                    .Subscribe(kernel.Resolve<ISyncTrackerDataEventObserver>()));

在不创建大量硬编码依赖项和破坏 IoC 范例的情况下实现此目标的正确方法是什么?

当我想出要看的地方时,这非常简单。 kernel.TryGet<> 将从当前绑定中获取服务类型。

kernel.Rebind<IAddressRepository>().To<AddressRepository>().InBackgroundJobScope()
    .OnActivation(repo => repo
        .Subscribe(kernel.TryGet<SyncTrackerDataEventObserver<Address, AddressRepository>>() 
            ?? throw new ObserverBindingException("Address")));

(其中 ObserverBindingException 是我为此目的创建的自定义异常类型)。