/// <summary>
        /// Registers the first discovered occurrence of
        /// </summary>
        /// <param name="collection">Service collection</param>
        /// <param name="classFinder">EasyIoC finder</param>
        /// <param name="Environment">Environment to register instances for</param>
        public static void RegisterDependencies(
            this IServiceCollection collection,
            IClassFinder classFinder,
            string Environment = null)
        {
            var assemblyFinder = new AssemblyFinder();
            var assemblies     = assemblyFinder.FindAssemblies(null);

            var classesToRegister = classFinder.FindRegisteredClasses(assemblies);
            var serviceCollection = new ServiceContainer(collection);

            List <Discoverable> environmentBasedClasses = new List <Discoverable>();

            // Pushing onto this list gives us a way to use the non-environment
            // based classes first, if none was specified
            foreach (var item in classesToRegister)
            {
                if (Environment == null && item.Environment != null)
                {
                    environmentBasedClasses.Add(item);
                }
                else
                {
                    classFinder.RegisterClass(item.Type, serviceCollection, Environment);
                }
            }

            foreach (var item in classesToRegister)
            {
                classFinder.RegisterClass(item.Type, serviceCollection, Environment);
            }
        }
Beispiel #2
0
        public void SetUp()
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

            AssemblyFinder.Current = AssemblyFinder.Create(TestContext.CurrentContext.TestDirectory);
            IWindsorContainer container = new WindsorContainer();
            var assemblies = AssemblyFinder.Current.GetAssembliesTagged <AssemblyTagAttribute>();

            container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel));
            container.Install(new RouterInstaller(assemblies));
            container.Install(new ServiceLocatorInstaller());
            container.Install(new SettingsInstaller());
            container.Register(Component.For(typeof(IMessageHandler <Message>)).ImplementedBy(typeof(MessageHandler)).Named(typeof(MessageHandler).FullName).LifestyleSingleton());
            container.Register(Component.For(typeof(IMessageHandler <Message1>)).ImplementedBy(typeof(Message1Handler)).Named(typeof(Message1Handler).FullName).LifestyleSingleton());
            container.Register(Component.For(typeof(IMessageHandler <Message>)).ImplementedBy(typeof(OtherMessageHandler)).Named(typeof(OtherMessageHandler).FullName).LifestyleSingleton());
            container.Register(Component.For(typeof(ILogger <PointToPointChannelInfo>)).ImplementedBy(typeof(Logger)).Named(typeof(Logger).FullName).LifestyleSingleton());
            container.Install(new AzureServiceBusRouterInstaller());
            //container.Install(new AzureStorageInstaller("DefaultEndpointsProtocol=https;AccountName=narwhalappssaeus001;AccountKey=xn2flH2joqs8LM0JKQXrOAWEEXc/I4e9AF873p1W/2grHSht8WEIkBbbl3PssTatuRCLlqMxbkvhKN9VmcPsFA=="));
            container.Install(new RouterLoggerInstaller());
            container.Register(Component.For(typeof(ILog)).Instance(LogManager.GetLogger("Cignium.Enigma.App")));
            _bus      = container.Resolve <IBus>();
            _brokered = container.Resolve <IRouter>();
            _startup  = container.Resolve <IStartup>();
            var config  = container.Resolve <IConfiguration>();
            var monitor = container.Resolve <IMonitor>();

            config.AddMonitoringTask <PointToPointChannelMonitor>(5000);
            config.AddLogger <Logger, PointToPointChannelInfo>();
            monitor.Start();

            //config.UsingAzureServiceBus();
            //config.UsingCommonLogging();
            //_sagabrokered = container.Resolve<ISagaRouter<BrokeredMessage>>();
        }
Beispiel #3
0
    public static void ScanAssemblies <T>(this IRegistrator registrator,
                                          IReuse reuse = null,
                                          Made made    = null,
                                          Setup setup  = null,
                                          IfAlreadyRegistered ifAlreadyRegistered = IfAlreadyRegistered.AppendNotKeyed)
    {
        var serviceTypeOf = typeof(T);
        var scannedTypes  = AssemblyFinder.ScanAssemblies()
                            .Where(assembly =>
        {
            try
            {
                return(assembly.DefinedTypes != null);
            }
            catch
            {
                return(false);
            }
        })
                            .SelectMany(assembly => assembly.DefinedTypes)
                            .Where(type => !type.IsAbstract && serviceTypeOf.GetTypeInfo()
                                   .IsAssignableFrom(type));

        foreach (var eachScannedType in scannedTypes)
        {
            registrator.Register(eachScannedType.AsType(), reuse, made, setup, ifAlreadyRegistered);

            var interfaces = eachScannedType.ImplementedInterfaces;
            foreach (var eachInterface in interfaces)
            {
                registrator.Register(eachInterface, eachScannedType.AsType(), reuse, made, setup, ifAlreadyRegistered);
            }
        }
    }
Beispiel #4
0
        public void AssemblyFinder_Find()
        {
            Assembly currentAssembly = Assembly.GetAssembly(typeof(AssemblyFinderTests));

            AssemblyFinder.Find(currentAssembly.GetName().Name)
            .Should().BeSameAs(currentAssembly);
        }
        internal static MSFrameworkBuilder UseInitializer(this MSFrameworkBuilder builder)
        {
            var assemblies = AssemblyFinder.GetAllList();
            var types = new HashSet<Type>();
            foreach (var assembly in assemblies)
            {
                foreach (var type in assembly.GetTypes())
                {
                    types.Add(type);
                }
            }

            var initializerType = typeof(Initializer);
            var notAllowAutoRegisterInitializerType = typeof(INotAutoRegisterInitializer);
            types.Remove(initializerType);
            foreach (var type in types)
            {
                if (initializerType.IsAssignableFrom(type) &&
                    !notAllowAutoRegisterInitializerType.IsAssignableFrom(type))
                {
                    builder.Services.AddSingleton(initializerType, type);
                }
            }

            return builder;
        }
Beispiel #6
0
        /// <summary>
        /// 初始化依赖注入
        /// </summary>
        /// <param name="config">框架配置信息</param>
        public void Initialize(OSharpConfig config)
        {
            //注册数据上下文
            Type[] dbContexTypes = config.DataConfig.ContextConfigs.Where(m => m.Enabled).Select(m => m.ContextType).ToArray();
            RegisterDbContextTypes(dbContexTypes, typeof(IUnitOfWork));

            //注册数据仓储
            Type repositoryType = GetRepositoryType();

            if (!typeof(IRepository <,>).IsGenericAssignableFrom(repositoryType))
            {
                throw new InvalidOperationException(Resources.IocInitializerBase_TypeNotIRepositoryType.FormatWith(repositoryType.FullName));
            }
            RegisterRepositoryType(repositoryType, typeof(IRepository <,>));

            //注册即时生命周期的映射
            Type[] dependencyTypes = TransientTypeFinder.FindAll();
            RegisterDependencyTypes <ITransientDependency>(dependencyTypes);

            //注册局部生命周期的映射
            dependencyTypes = LifetimeScopeTypeFinder.FindAll();
            RegisterDependencyTypes <ILifetimeScopeDependency>(dependencyTypes);

            //注册单例生命周期的映射
            dependencyTypes = SingletonTypeFinder.FindAll();
            RegisterDependencyTypes <ISingletonDependency>(dependencyTypes);

            //注册自定义映射
            RegisterCustomTypes();

            //设置各个框架的DependencyResolver
            Assembly[] assemblies = AssemblyFinder.FindAll();
            SetResolver(assemblies);
        }
Beispiel #7
0
        internal static void AddCoreAbpServices(this IServiceCollection services,
                                                IAbpApplication abpApplication,
                                                AbpApplicationCreationOptions applicationCreationOptions)
        {
            var moduleLoader   = new ModuleLoader();
            var assemblyFinder = new AssemblyFinder(abpApplication);
            var typeFinder     = new TypeFinder(assemblyFinder);

            if (!services.IsAdded <IConfiguration>())
            {
                services.ReplaceConfiguration(
                    ConfigurationHelper.BuildConfiguration(
                        applicationCreationOptions.Configuration
                        )
                    );
            }

            services.TryAddSingleton <IModuleLoader>(moduleLoader);
            services.TryAddSingleton <IAssemblyFinder>(assemblyFinder);
            services.TryAddSingleton <ITypeFinder>(typeFinder);
            services.TryAddSingleton <IInitLoggerFactory>(new DefaultInitLoggerFactory());

            services.AddAssemblyOf <IAbpApplication>();

            services.Configure <AbpModuleLifecycleOptions>(options =>
            {
                options.Contributors.Add <OnPreApplicationInitializationModuleLifecycleContributor>();
                options.Contributors.Add <OnApplicationInitializationModuleLifecycleContributor>();
                options.Contributors.Add <OnPostApplicationInitializationModuleLifecycleContributor>();
                options.Contributors.Add <OnApplicationShutdownModuleLifecycleContributor>();
            });
        }
        public void FindAssemblies_FindsReferencedAssemblies_Transitive_NotTwice()
        {
            // dependency chain: _assembly3 -> _assembly2 -> _assembly1; _assembly3 -> _assembly1
            Assert.That(IsAssemblyReferencedBy(_assembly2, _assembly3), Is.True);
            Assert.That(IsAssemblyReferencedBy(_assembly1, _assembly3), Is.True);
            Assert.That(IsAssemblyReferencedBy(_assembly1, _assembly2), Is.True);

            // because _assembly1 is already loaded via _assembly3, it's not tried again via _assembly2

            var loaderMock = MockRepository.GenerateMock <IAssemblyLoader> ();

            loaderMock
            .Expect(mock => mock.TryLoadAssembly(ArgReferenceMatchesDefinition(_assembly2), Arg.Is(_assembly3.FullName)))   // load _assembly2 via _assembly3
            .Return(_assembly2);
            loaderMock
            .Expect(mock => mock.TryLoadAssembly(ArgReferenceMatchesDefinition(_assembly1), Arg.Is(_assembly3.FullName)))   // load _assembly1 via _assembly3
            .Return(null);
            loaderMock
            .Expect(mock => mock.TryLoadAssembly(ArgReferenceMatchesDefinition(_assembly1), Arg.Is(_assembly2.FullName)))   // _assembly1 already loaded, no second time
            .Repeat.Never()
            .Return(_assembly2);
            loaderMock.Replay();

            var rootAssemblyFinderStub = MockRepository.GenerateMock <IRootAssemblyFinder> ();

            rootAssemblyFinderStub.Stub(stub => stub.FindRootAssemblies()).Return(new[] { new RootAssembly(_assembly3, true) });
            rootAssemblyFinderStub.Replay();

            var finder = new AssemblyFinder(rootAssemblyFinderStub, loaderMock);

            finder.FindAssemblies();

            loaderMock.VerifyAllExpectations();
        }
        public static MSFrameworkBuilder UseRequestProcessor(this MSFrameworkBuilder builder)
        {
            var assemblies = AssemblyFinder.GetAllList();

            builder.UseRequestProcessor(assemblies.ToArray());
            return(builder);
        }
Beispiel #10
0
        public void AssemblyFinder_FindAllByPattern()
        {
            var items = AssemblyFinder.FindAllByPattern("^Atata$");

            items.Should().ContainSingle()
            .Which.GetName().Name.Should().Be("Atata");
        }
    internal static void AddLinFxCoreServices(this IServiceCollection services, IApplication application, ApplicationCreationOptions applicationCreationOptions)
    {
        var moduleLoader   = new ModuleLoader();
        var assemblyFinder = new AssemblyFinder(application);
        var typeFinder     = new TypeFinder(assemblyFinder);

        if (!services.IsAdded <IConfiguration>())
        {
            //services.ReplaceConfiguration(ConfigurationHelper.BuildConfiguration(applicationCreationOptions.Configuration));
        }

        services.TryAddSingleton <IModuleLoader>(moduleLoader);
        services.TryAddSingleton <IAssemblyFinder>(assemblyFinder);
        services.TryAddSingleton <ITypeFinder>(typeFinder);

        services.AddAssemblyOf <IApplication>();

        //services.AddTransient(typeof(ISimpleStateCheckerManager<>), typeof(SimpleStateCheckerManager<>));

        services.Configure <ModuleLifecycleOptions>(options =>
        {
            options.Contributors.Add <OnPreApplicationInitializationModuleLifecycleContributor>();
            options.Contributors.Add <OnApplicationInitializationModuleLifecycleContributor>();
            options.Contributors.Add <OnPostApplicationInitializationModuleLifecycleContributor>();
            options.Contributors.Add <OnApplicationShutdownModuleLifecycleContributor>();
        });
    }
Beispiel #12
0
 public static Assembly[] FindExtensionAssemblies()
 {
     return(AssemblyFinder
            .FindAssemblies(txt => { }, false)
            .Where(a => a.HasAttribute <JasperModuleAttribute>())
            .ToArray());
 }
        public static Dictionary <ServiceLifetime, Type[]> GetDependencyTypeDict()
        {
            if (_dict == null)
            {
                lock (Locker)
                {
                    if (_dict == null)
                    {
                        var scope     = typeof(IScopeDependency);
                        var singleton = typeof(ISingletonDependency);
                        var transient = typeof(ITransientDependency);

                        var assemblies = AssemblyFinder.GetAllList();
                        var scopeTypes = assemblies.SelectMany(assembly => assembly.GetTypes())
                                         .Where(type => scope.IsAssignableFrom(type) && !type.IsAbstract &&
                                                !type.IsInterface).ToArray();
                        var singletonTypes = assemblies.SelectMany(assembly => assembly.GetTypes())
                                             .Where(type => singleton.IsAssignableFrom(type) && !type.IsAbstract &&
                                                    !type.IsInterface).ToArray();
                        var transientTypes = assemblies.SelectMany(assembly => assembly.GetTypes())
                                             .Where(type => transient.IsAssignableFrom(type) && !type.IsAbstract &&
                                                    !type.IsInterface).ToArray();
                        _dict = new Dictionary <ServiceLifetime, Type[]>
                        {
                            { ServiceLifetime.Scoped, scopeTypes },
                            { ServiceLifetime.Singleton, singletonTypes },
                            { ServiceLifetime.Transient, transientTypes }
                        };
                    }
                }
            }

            return(_dict);
        }
        public void FindClassesOfType()
        {
            var assemblyFinder = new AssemblyFinder();
            var services       = assemblyFinder.FindClassesOfType(typeof(IService));

            Assert.IsTrue(services.Count() == 3);
        }
        public static void RegisterDependencies(
            this IServiceCollection collection,
            IClassFinder classFinder,
            Func <string, bool> canRegister)
        {
            var assemblyFinder = new AssemblyFinder();
            var assemblies     = assemblyFinder.FindAssemblies(null);
            Dictionary <string, bool> registeredResponses = new Dictionary <string, bool>();

            var classesToRegister = classFinder.FindRegisteredClasses(assemblies);
            var serviceCollection = new ServiceContainer(collection);

            foreach (var item in classesToRegister)
            {
                if (!registeredResponses.ContainsKey(item.Environment))
                {
                    var envCanRegister = canRegister(item.Environment);
                    registeredResponses.Add(item.Environment, envCanRegister);
                }

                if (registeredResponses[item.Environment])
                {
                    classFinder.RegisterClass(item.Type, serviceCollection, null);
                }
            }
        }
        public static IServiceCollection AddAutoMapper(this IServiceCollection service)
        {
            var assembies = AssemblyFinder.GetCustomerAssemblies().Select(a => a.FullName).ToArray();

            service.AddSingleton(new AutoMapperConfiguration(assembies).GetMapper());
            return(service);
        }
Beispiel #17
0
        private List <Type> GetAllTypes()
        {
            var allTypes = new List <Type>();

            foreach (var assembly in AssemblyFinder.GetAllAssemblies().Distinct())
            {
                try
                {
                    Type[] typesInThisAssembly;

                    try
                    {
                        typesInThisAssembly = assembly.GetTypes();
                    }
                    catch (ReflectionTypeLoadException ex)
                    {
                        typesInThisAssembly = ex.Types;
                    }

                    if (typesInThisAssembly.IsNullOrEmpty())
                    {
                        continue;
                    }

                    allTypes.AddRange(typesInThisAssembly.Where(type => type != null));
                }
                catch
                {
                }
            }
            return(allTypes);
        }
Beispiel #18
0
        public FubuRegistry()
        {
            var type = GetType();

            _name = type.Name.Replace("TransportRegistry", "").Replace("Registry", "").ToLower();

            if (type == typeof(FubuRegistry) || type == typeof(FubuPackageRegistry))
            {
                _applicationAssembly = AssemblyFinder.FindTheCallingAssembly();
            }
            else
            {
                _applicationAssembly = type.Assembly;
            }

            _config = new ConfigGraph(_applicationAssembly);

            if (!this.GetType().CanBeCastTo <FubuPackageRegistry>())
            {
                // TODO: Hokey. Gotta be a better way to do this
                AlterSettings <ChannelGraph>(x =>
                {
                    if (x.Name.IsEmpty())
                    {
                        x.Name = _name;
                    }
                });
            }
        }
        public void FindClassesOfType_Generic_MyFirstClass()
        {
            var assemblyFinder = new AssemblyFinder();
            var services       = assemblyFinder.FindClassesOfType <MyFirstClass>();

            Assert.IsTrue(services.Count() == 2);
        }
        public static MSFrameworkBuilder UseEventDispatcher(this MSFrameworkBuilder builder)
        {
            var assemblies = AssemblyFinder.GetAllList();

            builder.UseEventDispatcher(assemblies.ToArray());
            return(builder);
        }
        public void FindClassesOfType_Generic_IService()
        {
            var assemblyFinder = new AssemblyFinder();
            var services       = assemblyFinder.FindClassesOfType <IService>();

            Assert.IsTrue(services.Count() == 3);
        }
Beispiel #22
0
        /// <summary>
        /// Reads logger settings from the provided configuration object using the provided section name. Generally this
        /// is preferable over the other method that takes a configuration section. Only this version will populate
        /// IConfiguration parameters on target methods.
        /// </summary>
        /// <param name="settingConfiguration">Logger setting configuration.</param>
        /// <param name="configuration">A configuration object which contains a Serilog section.</param>
        /// <param name="sectionName">A section name for section which contains a Serilog section.</param>
        /// <param name="dependencyContext">The dependency context from which sink/enricher packages can be located. If not supplied, the platform
        /// default will be used.</param>
        /// <returns>An object allowing configuration to continue.</returns>
        public static LoggerConfiguration Configuration(
            this LoggerSettingsConfiguration settingConfiguration,
            IConfiguration configuration,
            string sectionName,
            DependencyContext dependencyContext = null)
        {
            if (settingConfiguration == null)
            {
                throw new ArgumentNullException(nameof(settingConfiguration));
            }
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }
            if (sectionName == null)
            {
                throw new ArgumentNullException(nameof(sectionName));
            }

            var assemblyFinder = dependencyContext == null
                ? AssemblyFinder.Auto()
                : AssemblyFinder.ForDependencyContext(dependencyContext);

            return(settingConfiguration.Settings(
                       new ConfigurationReader(
                           configuration.GetSection(sectionName),
                           assemblyFinder,
                           configuration)));
        }
Beispiel #23
0
        public void AssemblyFinder_FindAllByPatterns()
        {
            var items = AssemblyFinder.FindAllByPatterns("^Atata$", "^Atata.Tests$");

            items.Should().HaveCount(2);
            items.Should().Contain(x => x.GetName().Name == "Atata");
            items.Should().Contain(x => x.GetName().Name == "Atata.Tests");
        }
        public void GetAssembliesTagged_WithStatement_ShouldNotBeEmpty()
        {
            var sut = new AssemblyFinder(AppDomain.CurrentDomain.BaseDirectory);

            var assemblies = sut.GetAssembliesTagged<AssemblyTagAttribute>(x=>x.Name=="Test");

            assemblies.ShouldNotBeEmpty();
        }
        public void GetAssemblies_WithStatement_ShouldNotBeEmpty()
        {
            var sut = new AssemblyFinder(AppDomain.CurrentDomain.BaseDirectory);

            var assemblies = sut.GetAssemblies(x=>x.FullName.Contains("Jal.Finder"));

            assemblies.ShouldNotBeEmpty();
        }
        public void GetAssemblies_With_ShouldNotBeEmpty()
        {
            var sut = new AssemblyFinder(AppDomain.CurrentDomain.BaseDirectory);

            var assemblies = sut.GetAssemblies();

            assemblies.ShouldNotBeEmpty();
        }
        public IEnumerable <IPackageInfo> Load(IPackageLog log)
        {
            Func <Assembly, bool> filter           = assem => assem.GetCustomAttributes(typeof(BottleServiceAttribute), false).Any();
            Action <string>       onDirectoryFound = dir => log.Trace("Looking for assemblies marked with the [BottleService] attribute in " + dir);
            var assemblies = AssemblyFinder.FindAssemblies(filter, onDirectoryFound);

            return(assemblies.Select(x => new AssemblyPackageInfo(x)));
        }
        public void GetAssemblies_WithStatement_ShouldNotBeEmpty()
        {
            var sut = new AssemblyFinder(AppDomain.CurrentDomain.BaseDirectory);

            var assemblies = sut.GetAssemblies(x => x.FullName.Contains("Jal.Finder"));

            assemblies.ShouldNotBeEmpty();
        }
Beispiel #29
0
        public IEnumerable <Type> Find()
        {
            var assemblies = AssemblyFinder.FindDependentAssemblies().ToArray();

            return
                (TypeRepository.FindTypes(assemblies, TypeClassification.Concretes,
                                          x => x.IsConcreteTypeOf <FubuRegistry>() && x.IsConcreteWithDefaultCtor()).Result());
        }
        public void GetAssemblies_With_ShouldNotBeEmpty()
        {
            var sut = AssemblyFinder.Create(AppDomain.CurrentDomain.BaseDirectory);

            var assemblies = sut.GetAssemblies();

            assemblies.ShouldNotBeEmpty();
        }
        public void GetAssembliesTagged_WithStatement_ShouldNotBeEmpty()
        {
            var sut = new AssemblyFinder(AppDomain.CurrentDomain.BaseDirectory);

            var assemblies = sut.GetAssembliesTagged <AssemblyTagAttribute>(x => x.Name == "Test");

            assemblies.ShouldNotBeEmpty();
        }
Beispiel #32
0
 private static Type[] FindCommand(CommandLineParsedArgs args)
 {
     return(AssemblyFinder
            .GetCurrentAssemblyWithDependencies()
            .SelectMany(x => x.GetTypes()
                        .Where(z => z.GetTypeInfo().GetCustomAttribute <CommandAttribute>() != null &&
                               (z.GetTypeInfo().GetCustomAttribute <CommandAttribute>().Name == args.CommandName ||
                                z.GetTypeInfo().GetCustomAttribute <CommandAttribute>().Alias == args.CommandName
                               ))).ToArray());
 }
Beispiel #33
0
        protected override void Load(ContainerBuilder builder)
        {
            var classMapper = typeof(IClassMapper);
            var assembiles  = new AssemblyFinder().GetAllAssemblies()
                              .Where(t =>
                                     t.GetTypes().Any(inner => classMapper.IsAssignableFrom(inner) && inner != classMapper)).ToArray();

            DapperExtensions.DapperExtensions.SetMappingAssemblies(assembiles);
            DapperExtensions.DapperAsyncExtensions.SetMappingAssemblies(assembiles);
        }