public void RegisterSingleton(Type tInterface, object theObject)
 {
     lock (this)
     {
         _resolvers[tInterface] = new SingletonResolver(theObject);
     }
 }
Beispiel #2
0
        internal void RegisterSingleton <T>(Func <DictionaryContainer, T> resolver)
        {
            Logger.Debug("Registering {0} as singleton.", typeof(T));

            var singletonResolver = new SingletonResolver <T>(resolver);

            this.Register(singletonResolver.Resolve);
        }
Beispiel #3
0
        public static void ToSingleton <TApi, TImpl>(this IInjector injector, bool oneInstance = true, bool registerImpl = false) where TImpl : TApi
        {
            CheckImpl <TImpl>();
            var resolver = new SingletonResolver(typeof(TImpl), oneInstance);

            injector.Register(typeof(TApi), resolver);
            if (registerImpl)
            {
                injector.Register(typeof(TImpl), resolver);
            }
        }
Beispiel #4
0
        internal void RegisterSingleton <T>(Func <DictionaryContainer, T> resolver)
        {
            var singletonResolver = new SingletonResolver <T>(resolver);

            this.Register(singletonResolver.Resolve);
        }
Beispiel #5
0
 public UnresolvedState(SingletonResolver <T> resolver, Func <DictionaryContainer, T> resolveFunction)
 {
     this.resolveFunction = resolveFunction;
     this.resolver        = resolver;
 }
Beispiel #6
0
        public override async Task ProcessAsync()
        {
            var singletonManager = new SingletonResolver();

            singletonManager.Register <HttpClientVerb.NameAndDescription>();
            var num = 12;

            singletonManager.Register(num);
            singletonManager.Register("one", new Lazy <int>(() => 1));
            if (!singletonManager.TryResolve <HttpClientVerb.NameAndDescription>(out _))
            {
                ConsoleLine.WriteLine("Failed to resolve.");
            }
            if (singletonManager.TryResolve("one", out num))
            {
                ConsoleLine.WriteLine("Got! " + num);
            }
            if (singletonManager.TryResolve(out num))
            {
                ConsoleLine.WriteLine("Got! " + num);
            }
            ConsoleLine.WriteLine("Got! " + singletonManager.Resolve(typeof(int), "one"));
            ConsoleLine.WriteLine();

            var count  = 0;
            var keeper = new SingletonKeeper <int>(async() =>
            {
                await Task.Delay(50);
                return(count += 1);
            });

            using (var refresher = new SingletonRenewTimer <int>(keeper, TimeSpan.FromMilliseconds(100)))
            {
                ConsoleLine.WriteLine("Started scheduler.");
                ConsoleLine.WriteLine(count);
                await Task.Delay(100);

                ConsoleLine.WriteLine(count);
                await Task.Delay(100);

                ConsoleLine.WriteLine(count);
                await Task.Delay(100);

                ConsoleLine.WriteLine(count);
                ConsoleLine.WriteLine("Force renew 3 times.");
                Task.WaitAll(refresher.RenewAsync(), refresher.RenewAsync(), refresher.RenewAsync());
                ConsoleLine.WriteLine(count);
                refresher.IsPaused = true;
                ConsoleLine.WriteLine("Paused.");
                await Task.Delay(100);

                ConsoleLine.WriteLine(count);
                await Task.Delay(200);

                ConsoleLine.WriteLine(count);
                refresher.IsPaused = false;
                ConsoleLine.WriteLine("Resumed.");
                await Task.Delay(200);

                ConsoleLine.WriteLine(count);
            }

            await Task.Delay(200);

            ConsoleLine.WriteLine(count);
            ConsoleLine.WriteLine("Disposed scheduler.");
            await Task.Delay(200);

            ConsoleLine.WriteLine(count);
            ConsoleLine.WriteLine("Renew again.");
            await keeper.RenewAsync();

            ConsoleLine.WriteLine(count);
            ConsoleLine.WriteLine("Disable renew by way 1.");
            keeper.FreezeRenew(TimeSpan.FromMilliseconds(100));
            await keeper.RenewIfCanAsync();

            ConsoleLine.WriteLine(count);
            await Task.Delay(200);

            await keeper.RenewIfCanAsync();

            ConsoleLine.WriteLine(count);
            ConsoleLine.WriteLine("Disable renew by way 2.");
            keeper.LockRenewSpan = TimeSpan.FromMilliseconds(100);
            await keeper.RenewIfCanAsync();

            ConsoleLine.WriteLine(count);
            await Task.Delay(200);

            await keeper.RenewIfCanAsync();

            ConsoleLine.WriteLine(count);
            ConsoleLine.WriteLine("Disable renew by way 3.");
            keeper.IsRenewDisabled = true;
            await keeper.RenewIfCanAsync();

            ConsoleLine.WriteLine(count);
            ConsoleLine.WriteLine("Done!");
        }
Beispiel #7
0
 /// <summary>
 /// Construct IOC Container with singleton instance
 /// </summary>
 private WTWIOC(SingletonResolver singletonResolver)
     : this()
 {
     _singletonResolver = singletonResolver;
 }