public void Start() { var builder = new BuiltinContainerBuilder(); builder.AddMessagePipe(x => { x.EnableCaptureStackTrace = true; }); builder.AddMessageBroker <int>(); var resolver = builder.BuildServiceProvider(); GlobalMessagePipe.SetProvider(resolver); publisher = resolver.GetRequiredService <IPublisher <int> >(); subscriber = resolver.GetRequiredService <ISubscriber <int> >(); button1.onClick.AddListener(FooSubscribe); button2.onClick.AddListener(BarSubscribe); button3.onClick.AddListener(() => { disposable = DisposableBag.Create(disposable, subscriber.Subscribe(x => Debug.Log($"{id}:Baz"))); }); button4.onClick.AddListener(UnSubscribeAll); disposable = DisposableBag.Empty; Forever().Forget(); }
public static IServiceProvider BuildBuiltin(Action <BuiltinContainerBuilder> use) { var builder = new BuiltinContainerBuilder(); builder.AddMessagePipe(); use(builder); return(builder.BuildServiceProvider()); }
public BuiltinContainerBuilderServiceProvider(BuiltinContainerBuilder builder) { this.singletonInstances = new Dictionary <Type, Lazy <object> >(builder.singletonInstances.Count + builder.singleton.Count); this.transientTypes = new Dictionary <Type, ServiceProviderType>(builder.transient.Count); foreach (var item in builder.singletonInstances) { this.singletonInstances[item.Key] = new Lazy <object>(() => item.Value); } foreach (var item in builder.singleton) { var implType = item.implementationType; this.singletonInstances[item.serviceType] = new Lazy <object>(() => new ServiceProviderType(implType).Instantiate(this, 0)); // memo: require to lazy with parameter(pass depth). } foreach (var item in builder.transient) { this.transientTypes[item.serviceType] = new ServiceProviderType(item.implementationType); } }