VContainer + UniRx
UniRx is an Rx (Reactive Extension) library optimized for Unity.
Here is an example of combining VContainer entry points with UniRx.
public class FooController : IStartable, IDisposable{ readonly CompositeDisposable disposable = new CompositeDisposable;
void IStartable.Start() { fooObservable .Subscribe(_ => /* Do something */) .AddTo(disposable) }
void IDisposable.Dispose() => disposable.Dispose();}
If you want to create a short hand like AddTo(this)
, you can create an extension method like this:
public class ControllerBase : IDisposable{ readonly CompositeDisposable disposable = new CompositeDisposable;
void IDisposable.Dispose() => disposable.Dispose();
public void AddDisposable(IDisposable item) { disposable.Add(item); }}
public static class DisposableExtensions{ public static T AddTo<T>(this T disposable, ControllerBase controller) where T: IDisposable { controller.AddDisposable(disposable); return disposable; }}
This can be used as follows:
public class FooController : ControllerBase, IStartable{ void IStartable.Start() { someObservable .Subscribe(...) .AddTo(this); }}