public OrleansServiceInterfaceMapper(IAssemblyProvider assemblyProvider)
        {
            Mappings = assemblyProvider.GetAllTypes()
                       .Where(t => t.IsInterface && typeof(IGrain).IsAssignableFrom(t))
                       .SelectMany(t => t.GetInterfaces().Where(i => i.GetCustomAttribute <HttpServiceAttribute>() != null)
                                   .Select(i => new { CallableInterface = t, ServiceInterface = i }))
                       .ToDictionary(x => x.ServiceInterface, x => x.CallableInterface);


            ServiceClassesTypes = assemblyProvider.GetAllTypes().Where(t => t.IsClass && typeof(IGrain).IsAssignableFrom(t)).ToArray();

            ExtractHealthStatusServiceType(Mappings.Values);
        }
Esempio n. 2
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);
            }
        }
Esempio n. 3
0
        public void ShouldCallConfigObjectCacheWhileScanningAssembliesForIConfigObjects()
        {
            IConfigObjectsCache        configCacheMock = Substitute.For <IConfigObjectsCache>();
            TestingKernel <ConsoleLog> kernel          = new TestingKernel <ConsoleLog>(k => k.Rebind <IConfigObjectsCache>().ToConstant(configCacheMock));
            IAssemblyProvider          aProvider       = kernel.Get <IAssemblyProvider>();
            int typesCount = aProvider.GetAllTypes().Where(ConfigObjectCreator.IsConfigObject).Count();

            configCacheMock.Received(typesCount).RegisterConfigObjectCreator(Arg.Any <IConfigObjectCreator>());
        }
        public void NoValueTypesInAssemblies_TestPassed()
        {
            IAssemblyProvider assemblyProviderMock = Substitute.For <IAssemblyProvider>();

            assemblyProviderMock.GetAllTypes().Returns(new[] { typeof(ReferenceTypeConfig) });

            ConfigObjectTypeValidator configValidator = new ConfigObjectTypeValidator(assemblyProviderMock);

            configValidator.Validate();
        }
        public void ThrowExceptionWhenValueTypeImplementsIConfigObject()
        {
            IAssemblyProvider assemblyProviderMock = Substitute.For <IAssemblyProvider>();

            assemblyProviderMock.GetAllTypes().Returns(new [] { typeof(ReferenceTypeConfig), typeof(ValueTypeConfig) });

            ConfigObjectTypeValidator configValidator = new ConfigObjectTypeValidator(assemblyProviderMock);

            Assert.Throws <ProgrammaticException>(configValidator.Validate);
        }
        public void Validate()
        {
            List <Type> invalidConfigObjectTypes = _assemblyProvider.GetAllTypes()
                                                   .Where(t => t.GetTypeInfo().ImplementedInterfaces.Any(i => i == typeof(IConfigObject)) && !ConfigObjectCreator.IsConfigObject(t)).ToList();

            if (invalidConfigObjectTypes.Count == 0)
            {
                return;
            }

            throw new ProgrammaticException(
                      $"The type/s {string.Join(", ", invalidConfigObjectTypes.Select(t => t.Name))} are value types and cannot implement IConfigObject interfaces");
        }
        /// <summary>
        /// Run the discovery of IConfigObject descendants, instantiate them and grab validation or any other errors.
        /// </summary>
        /// <remarks>
        /// Throwing, except <see cref="ConfigurationException"/>. On purpose to expose any exceptions except this one.
        /// </remarks>
        public ICollection <ResultPerType> Verify()
        {
            var metadata = $"{_envProvider.Zone}-{_envProvider.DeploymentEnvironment}";
            var results  = new List <ResultPerType>();

            // Get ConfigObject types in related binaries
            var configObjectTypes = _assemblyProvider.GetAllTypes().Where(ConfigObjectCreator.IsConfigObject).AsEnumerable();

            // Instantiate and grab validation issues
            foreach (var configType in configObjectTypes)
            {
                try
                {
                    var creator = _configCreatorFunc(configType);

                    // ReSharper disable once UnusedVariable
                    // Only to review in debugging session
                    var objConfig = creator.GetLatest();

                    results.Add(new ResultPerType
                    {
                        Success  = true,
                        Type     = configType,
                        MetaData = metadata
                    });
                }
                catch (ConfigurationException ex)
                {
                    var path  = ex.UnencryptedTags?["ConfigObjectPath"] ?? ex.Message;
                    var error = ex.UnencryptedTags?["ValidationErrors"] ?? ex.InnerException?.Message;
                    results.Add(new ResultPerType
                    {
                        Success  = false,
                        Type     = configType,
                        MetaData = metadata,
                        Path     = path,
                        Details  = error
                    });
                }
            }

            return(results);
        }