/// <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); } }
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>>(); }
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); } } }
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; }
/// <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); }
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); }
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>(); }); }
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); }
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); }
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); }
/// <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))); }
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(); }
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(); }
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()); }
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); }