private void SearchAssembliesAndRebindIConfig() { IAssemblyProvider aProvider = _kernel.Get <IAssemblyProvider>(); foreach (Type configType in aProvider.GetAllTypes().Where(ConfigObjectCreator.IsConfigObject)) { IConfigObjectCreator configObjectCreator = _kernel.Get <Func <Type, IConfigObjectCreator> >()(configType); if (!_kernel.IsBinded(typeof(Func <>).MakeGenericType(configType))) { dynamic getLatestLambda = configObjectCreator.GetLambdaOfGetLatest(configType); _kernel.Rebind(typeof(Func <>).MakeGenericType(configType)).ToMethod(t => getLatestLambda()); } Type sourceBlockType = typeof(ISourceBlock <>).MakeGenericType(configType); if (!_kernel.IsBinded(typeof(ISourceBlock <>).MakeGenericType(configType))) { _kernel.Rebind(sourceBlockType).ToMethod(t => configObjectCreator.ChangeNotifications); } if (!_kernel.IsBinded(typeof(Func <>).MakeGenericType(sourceBlockType))) { dynamic changeNotificationsLambda = configObjectCreator.GetLambdaOfChangeNotifications(sourceBlockType); _kernel.Rebind(typeof(Func <>).MakeGenericType(sourceBlockType)).ToMethod(t => changeNotificationsLambda()); } if (!_kernel.IsBinded(configType)) { _kernel.Rebind(configType).ToMethod(t => configObjectCreator.GetLatest()); } _configObjectsCache.RegisterConfigObjectCreator(configObjectCreator); } }
public void RegisterConfigObjectCreator(IConfigObjectCreator configObjectCreator) { if (_configObjectCreatorsList.Contains(configObjectCreator)) { throw new InvalidOperationException(); } _configObjectCreatorsList.Add(configObjectCreator); }
public void Register2Creators() { IConfigObjectCreator config1 = Substitute.For <IConfigObjectCreator>(); IConfigObjectCreator config2 = Substitute.For <IConfigObjectCreator>(); ConfigObjectsCache cache = new ConfigObjectsCache(); cache.RegisterConfigObjectCreator(config1); cache.RegisterConfigObjectCreator(config2); cache.DecryptAndReloadConfigObjects(null, null); config1.Received(1).Reload(); config2.Received(1).Reload(); }
private void EnsureCreator() { if (_configObjectCreator == null) { //Resolving from ninject should be performed out of the lock, to avoid potential dead locks, caused by locking, performed by ninject itself Func <Type, IConfigObjectCreator> getCreator = _kernel.Get <Func <Type, IConfigObjectCreator> >(); IConfigObjectCreator creator = getCreator(_configType); lock (_lockObject) { if (_configObjectCreator == null) { _configObjectCreator = creator; } } } }