public void RegisterSingleton(Type tInterface, object theObject) { lock (this) { _resolvers[tInterface] = new SingletonResolver(theObject); } }
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); }
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); } }
internal void RegisterSingleton <T>(Func <DictionaryContainer, T> resolver) { var singletonResolver = new SingletonResolver <T>(resolver); this.Register(singletonResolver.Resolve); }
public UnresolvedState(SingletonResolver <T> resolver, Func <DictionaryContainer, T> resolveFunction) { this.resolveFunction = resolveFunction; this.resolver = resolver; }
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!"); }
/// <summary> /// Construct IOC Container with singleton instance /// </summary> private WTWIOC(SingletonResolver singletonResolver) : this() { _singletonResolver = singletonResolver; }