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