예제 #1
0
    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();
    }
예제 #2
0
    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);
            }
        }