public static ITriggerBindingProvider Create(INameResolver nameResolver, IStorageAccountProvider storageAccountProvider, IExtensionTypeLocator extensionTypeLocator, IHostIdProvider hostIdProvider, IQueueConfiguration queueConfiguration, IBackgroundExceptionDispatcher backgroundExceptionDispatcher, IContextSetter<IMessageEnqueuedWatcher> messageEnqueuedWatcherSetter, IContextSetter<IBlobWrittenWatcher> blobWrittenWatcherSetter, ISharedContextProvider sharedContextProvider, IExtensionRegistry extensions, TextWriter log) { List<ITriggerBindingProvider> innerProviders = new List<ITriggerBindingProvider>(); innerProviders.Add(new QueueTriggerAttributeBindingProvider(nameResolver, storageAccountProvider, queueConfiguration, backgroundExceptionDispatcher, messageEnqueuedWatcherSetter, sharedContextProvider, log)); innerProviders.Add(new BlobTriggerAttributeBindingProvider(nameResolver, storageAccountProvider, extensionTypeLocator, hostIdProvider, queueConfiguration, backgroundExceptionDispatcher, blobWrittenWatcherSetter, messageEnqueuedWatcherSetter, sharedContextProvider, log)); // add any registered extension binding providers foreach (ITriggerBindingProvider provider in extensions.GetExtensions(typeof(ITriggerBindingProvider))) { innerProviders.Add(provider); } return new CompositeTriggerBindingProvider(innerProviders); }
public async Task Initialize_PerformsExpectedRegistrations() { JobHostConfiguration config = new JobHostConfiguration(); config.AddService <INameResolver>(new RandomNameResolver()); TestLoggerProvider loggerProvider = new TestLoggerProvider(); ILoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(loggerProvider); config.LoggerFactory = loggerFactory; ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration(); ServiceBusExtensionConfig serviceBusExtensionConfig = new ServiceBusExtensionConfig(serviceBusConfig); IExtensionRegistry extensions = config.GetService <IExtensionRegistry>(); ITriggerBindingProvider[] triggerBindingProviders = extensions.GetExtensions <ITriggerBindingProvider>().ToArray(); Assert.Empty(triggerBindingProviders); IBindingProvider[] bindingProviders = extensions.GetExtensions <IBindingProvider>().ToArray(); Assert.Empty(bindingProviders); ExtensionConfigContext context = new ExtensionConfigContext { Config = config, }; serviceBusExtensionConfig.Initialize(context); // ensure the ServiceBusTriggerAttributeBindingProvider was registered triggerBindingProviders = extensions.GetExtensions <ITriggerBindingProvider>().ToArray(); Assert.Single(triggerBindingProviders); ServiceBusTriggerAttributeBindingProvider triggerBindingProvider = (ServiceBusTriggerAttributeBindingProvider)triggerBindingProviders[0]; Assert.NotNull(triggerBindingProvider); // ensure the ServiceBusAttributeBindingProvider was registered bindingProviders = extensions.GetExtensions <IBindingProvider>().ToArray(); Assert.Single(bindingProviders); ServiceBusAttributeBindingProvider bindingProvider = (ServiceBusAttributeBindingProvider)bindingProviders[0]; Assert.NotNull(bindingProvider); // ensure the default MessageOptions exception handler is wired up var messageOptions = serviceBusConfig.MessageOptions; var ex = new ServiceBusException(false); var args = new ExceptionReceivedEventArgs(ex, "TestAction", "TestEndpoint", "TestEntityPath", "TestClientId"); Assert.NotNull(serviceBusConfig.ExceptionHandler); // invoke the handler and make sure it logs await serviceBusConfig.MessageOptions.ExceptionReceivedHandler(args); string expectedMessage = "MessageReceiver error (Action=TestAction, ClientId=TestClientId, EntityPath=TestEntityPath, Endpoint=TestEndpoint)"; var logMessage = loggerProvider.GetAllLogMessages().Single(); Assert.Equal(LogLevel.Error, logMessage.Level); Assert.Equal(expectedMessage, logMessage.FormattedMessage); Assert.Same(ex, logMessage.Exception); }
public void UseServiceBus_NoServiceBusConfiguration_PerformsExpectedRegistration() { JobHostConfiguration config = new JobHostConfiguration(); string serviceBusConnection = "test service bus connection"; #pragma warning disable 0618 config.ServiceBusConnectionString = serviceBusConnection; #pragma warning restore 0618 IExtensionRegistry extensions = config.GetService <IExtensionRegistry>(); IExtensionConfigProvider[] configProviders = extensions.GetExtensions <IExtensionConfigProvider>().ToArray(); Assert.Equal(0, configProviders.Length); config.UseServiceBus(); // verify that the service bus config provider was registered configProviders = extensions.GetExtensions <IExtensionConfigProvider>().ToArray(); Assert.Equal(1, configProviders.Length); ServiceBusExtensionConfig serviceBusExtensionConfig = (ServiceBusExtensionConfig)configProviders.Single(); // verify that a default ServiceBusConfiguration was created, with the host (obsolete) // service bus connection string propagated #pragma warning disable 0618 Assert.Equal(serviceBusConnection, serviceBusExtensionConfig.Config.ConnectionString); #pragma warning restore 0618 }
public void Initialize_PerformsExpectedRegistrations() { JobHostConfiguration config = new JobHostConfiguration(); config.AddService <INameResolver>(new RandomNameResolver()); TestLoggerProvider loggerProvider = new TestLoggerProvider(); ILoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(loggerProvider); config.LoggerFactory = loggerFactory; EventHubConfiguration eventHubConfiguration = new EventHubConfiguration(); IExtensionRegistry extensions = config.GetService <IExtensionRegistry>(); ITriggerBindingProvider[] triggerBindingProviders = extensions.GetExtensions <ITriggerBindingProvider>().ToArray(); Assert.Empty(triggerBindingProviders); IBindingProvider[] bindingProviders = extensions.GetExtensions <IBindingProvider>().ToArray(); Assert.Empty(bindingProviders); ExtensionConfigContext context = new ExtensionConfigContext { Config = config, }; ((IExtensionConfigProvider)eventHubConfiguration).Initialize(context); // ensure the EventHubTriggerAttributeBindingProvider was registered triggerBindingProviders = extensions.GetExtensions <ITriggerBindingProvider>().ToArray(); EventHubTriggerAttributeBindingProvider triggerBindingProvider = (EventHubTriggerAttributeBindingProvider)triggerBindingProviders.Single(); Assert.NotNull(triggerBindingProvider); // ensure the EventProcessorOptions ExceptionReceived event is wired up var eventProcessorOptions = eventHubConfiguration.EventProcessorOptions; var ex = new EventHubsException(false, "Kaboom!"); var ctor = typeof(ExceptionReceivedEventArgs).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance).Single(); var args = (ExceptionReceivedEventArgs)ctor.Invoke(new object[] { "TestHostName", "TestPartitionId", ex, "TestAction" }); var handler = (Action <ExceptionReceivedEventArgs>)eventProcessorOptions.GetType().GetField("exceptionHandler", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(eventProcessorOptions); handler.Method.Invoke(handler.Target, new object[] { args }); string expectedMessage = "EventProcessorHost error (Action=TestAction, HostName=TestHostName, PartitionId=TestPartitionId)"; var logMessage = loggerProvider.GetAllLogMessages().Single(); Assert.Equal(LogLevel.Error, logMessage.Level); Assert.Equal(expectedMessage, logMessage.FormattedMessage); Assert.Same(ex, logMessage.Exception); }
/// <summary> /// Returns the collection of all registered <see cref="IFunctionFilter"/> types /// or subtypes. /// </summary> /// <param name="registry">The registry instance.</param> /// <returns>The collection of filters.</returns> internal static IEnumerable <IFunctionFilter> GetFunctionFilters(this IExtensionRegistry registry) { if (registry == null) { throw new ArgumentNullException("registry"); } // form a list of all filters of the specified type (including subclasses) var filters = new List <IFunctionFilter>(registry.GetExtensions <IFunctionInvocationFilter>()); filters.AddRange(registry.GetExtensions <IFunctionExceptionFilter>()); return(filters.Distinct()); }
public static IBindingProvider Create(INameResolver nameResolver, IStorageAccountProvider storageAccountProvider, IExtensionTypeLocator extensionTypeLocator, IContextGetter<IMessageEnqueuedWatcher> messageEnqueuedWatcherGetter, IContextGetter<IBlobWrittenWatcher> blobWrittenWatcherGetter, IExtensionRegistry extensions) { List<IBindingProvider> innerProviders = new List<IBindingProvider>(); innerProviders.Add(new QueueAttributeBindingProvider(nameResolver, storageAccountProvider, messageEnqueuedWatcherGetter)); innerProviders.Add(new BlobAttributeBindingProvider(nameResolver, storageAccountProvider, extensionTypeLocator, blobWrittenWatcherGetter)); innerProviders.Add(new TableAttributeBindingProvider(nameResolver, storageAccountProvider, extensions)); // add any registered extension binding providers foreach (IBindingProvider provider in extensions.GetExtensions(typeof(IBindingProvider))) { innerProviders.Add(provider); } innerProviders.Add(new CloudStorageAccountBindingProvider(storageAccountProvider)); innerProviders.Add(new CancellationTokenBindingProvider()); // The console output binder below will handle all remaining TextWriter parameters. It must come after the // Blob binding provider; otherwise bindings like Do([Blob("a/b")] TextWriter blob) wouldn't work. innerProviders.Add(new ConsoleOutputBindingProvider()); ContextAccessor<IBindingProvider> bindingProviderAccessor = new ContextAccessor<IBindingProvider>(); innerProviders.Add(new RuntimeBindingProvider(bindingProviderAccessor)); innerProviders.Add(new DataBindingProvider()); IBindingProvider bindingProvider = new CompositeBindingProvider(innerProviders); bindingProviderAccessor.SetValue(bindingProvider); return bindingProvider; }
public static ITriggerBindingProvider Create(INameResolver nameResolver, IStorageAccountProvider storageAccountProvider, IExtensionTypeLocator extensionTypeLocator, IHostIdProvider hostIdProvider, IQueueConfiguration queueConfiguration, IBackgroundExceptionDispatcher backgroundExceptionDispatcher, IContextSetter <IMessageEnqueuedWatcher> messageEnqueuedWatcherSetter, IContextSetter <IBlobWrittenWatcher> blobWrittenWatcherSetter, ISharedContextProvider sharedContextProvider, IExtensionRegistry extensions, TextWriter log) { List <ITriggerBindingProvider> innerProviders = new List <ITriggerBindingProvider>(); innerProviders.Add(new QueueTriggerAttributeBindingProvider(nameResolver, storageAccountProvider, queueConfiguration, backgroundExceptionDispatcher, messageEnqueuedWatcherSetter, sharedContextProvider, log)); innerProviders.Add(new BlobTriggerAttributeBindingProvider(nameResolver, storageAccountProvider, extensionTypeLocator, hostIdProvider, queueConfiguration, backgroundExceptionDispatcher, blobWrittenWatcherSetter, messageEnqueuedWatcherSetter, sharedContextProvider, log)); // add any registered extension binding providers foreach (ITriggerBindingProvider provider in extensions.GetExtensions(typeof(ITriggerBindingProvider))) { innerProviders.Add(provider); } return(new CompositeTriggerBindingProvider(innerProviders)); }
public static ITriggerBindingProvider Create(INameResolver nameResolver, IStorageAccountProvider storageAccountProvider, IExtensionTypeLocator extensionTypeLocator, IHostIdProvider hostIdProvider, IQueueConfiguration queueConfiguration, JobHostBlobsConfiguration blobsConfiguration, IWebJobsExceptionHandler exceptionHandler, IContextSetter <IMessageEnqueuedWatcher> messageEnqueuedWatcherSetter, IContextSetter <IBlobWrittenWatcher> blobWrittenWatcherSetter, ISharedContextProvider sharedContextProvider, IExtensionRegistry extensions, SingletonManager singletonManager, TraceWriter trace, ILoggerFactory loggerFactory) { List <ITriggerBindingProvider> innerProviders = new List <ITriggerBindingProvider>(); innerProviders.Add(new QueueTriggerAttributeBindingProvider(nameResolver, storageAccountProvider, queueConfiguration, exceptionHandler, messageEnqueuedWatcherSetter, sharedContextProvider, trace, loggerFactory)); innerProviders.Add(new BlobTriggerAttributeBindingProvider(nameResolver, storageAccountProvider, extensionTypeLocator, hostIdProvider, queueConfiguration, blobsConfiguration, exceptionHandler, blobWrittenWatcherSetter, messageEnqueuedWatcherSetter, sharedContextProvider, singletonManager, trace, loggerFactory)); // add any registered extension binding providers foreach (ITriggerBindingProvider provider in extensions.GetExtensions(typeof(ITriggerBindingProvider))) { innerProviders.Add(provider); } return(new CompositeTriggerBindingProvider(innerProviders)); }
/// <summary> /// Returns the collection of extension instances registered for the specified type. /// </summary> /// <typeparam name="TExtension">The service type to get extensions for.</typeparam> /// <param name="registry">The registry instance.</param> /// <returns>The collection of extension instances.</returns> public static IEnumerable <TExtension> GetExtensions <TExtension>(this IExtensionRegistry registry) { if (registry == null) { throw new ArgumentNullException("registry"); } return(registry.GetExtensions(typeof(TExtension)).Cast <TExtension>()); }
private static void InvokeExtensionConfigProviders(ExtensionConfigContext context) { IExtensionRegistry extensions = context.Config.GetExtensions(); IEnumerable <IExtensionConfigProvider> configProviders = extensions.GetExtensions(typeof(IExtensionConfigProvider)).Cast <IExtensionConfigProvider>(); foreach (IExtensionConfigProvider configProvider in configProviders) { configProvider.Initialize(context); } }
/// <summary> /// Returns the set of assemblies that have registered extensions. /// </summary> /// <param name="registry">The registry instance.</param> /// <returns>The unique set of assemblies.</returns> internal static IEnumerable <Assembly> GetExtensionAssemblies(this IExtensionRegistry registry) { HashSet <Assembly> assemblies = new HashSet <Assembly>(); foreach (Type extensionType in ExtensionTypes) { var currAssemblies = registry.GetExtensions(extensionType).Select(p => p.GetType().Assembly); assemblies.UnionWith(currAssemblies); } return(assemblies); }
public ITriggerBindingProvider Create() { var innerProviders = new List <ITriggerBindingProvider>(); // add any registered extension binding providers foreach (ITriggerBindingProvider provider in _extensions.GetExtensions(typeof(ITriggerBindingProvider))) { innerProviders.Add(provider); } return(new CompositeTriggerBindingProvider(innerProviders)); }
public void Initialize_PerformsExpectedRegistrations() { JobHostConfiguration config = new JobHostConfiguration(); config.AddService <INameResolver>(new RandomNameResolver()); ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration(); ServiceBusExtensionConfig serviceBusExtensionConfig = new ServiceBusExtensionConfig(serviceBusConfig); IExtensionRegistry extensions = config.GetService <IExtensionRegistry>(); ITriggerBindingProvider[] triggerBindingProviders = extensions.GetExtensions <ITriggerBindingProvider>().ToArray(); Assert.Equal(0, triggerBindingProviders.Length); IBindingProvider[] bindingProviders = extensions.GetExtensions <IBindingProvider>().ToArray(); Assert.Equal(0, bindingProviders.Length); ExtensionConfigContext context = new ExtensionConfigContext { Config = config, Trace = new TestTraceWriter(TraceLevel.Verbose) }; serviceBusExtensionConfig.Initialize(context); // ensure the ServiceBusTriggerAttributeBindingProvider was registered triggerBindingProviders = extensions.GetExtensions <ITriggerBindingProvider>().ToArray(); Assert.Equal(1, triggerBindingProviders.Length); ServiceBusTriggerAttributeBindingProvider triggerBindingProvider = (ServiceBusTriggerAttributeBindingProvider)triggerBindingProviders[0]; Assert.NotNull(triggerBindingProvider); // ensure the ServiceBusAttributeBindingProvider was registered bindingProviders = extensions.GetExtensions <IBindingProvider>().ToArray(); Assert.Equal(1, bindingProviders.Length); ServiceBusAttributeBindingProvider bindingProvider = (ServiceBusAttributeBindingProvider)bindingProviders[0]; Assert.NotNull(bindingProvider); }
public void GetService_IExtensionRegistry_ReturnsDefaultRegistry() { JobHostConfiguration configuration = new JobHostConfiguration(); IExtensionRegistry extensionRegistry = configuration.GetService <IExtensionRegistry>(); extensionRegistry.RegisterExtension <IComparable>("test1"); extensionRegistry.RegisterExtension <IComparable>("test2"); extensionRegistry.RegisterExtension <IComparable>("test3"); Assert.NotNull(extensionRegistry); IComparable[] results = extensionRegistry.GetExtensions <IComparable>().ToArray(); Assert.Equal(3, results.Length); }
public void UseServiceBus_NoServiceBusConfiguration_PerformsExpectedRegistration() { JobHostConfiguration config = new JobHostConfiguration(); IExtensionRegistry extensions = config.GetService <IExtensionRegistry>(); IExtensionConfigProvider[] configProviders = extensions.GetExtensions <IExtensionConfigProvider>().ToArray(); Assert.Empty(configProviders); config.UseServiceBus(); // verify that the service bus config provider was registered configProviders = extensions.GetExtensions <IExtensionConfigProvider>().ToArray(); Assert.Single(configProviders); ServiceBusExtensionConfig serviceBusExtensionConfig = (ServiceBusExtensionConfig)configProviders.Single(); // verify that a default ServiceBusConfiguration was created, with the host (obsolete) // service bus connection string propagated string serviceBusConnection = Environment.GetEnvironmentVariable("AzureWebJobsServiceBus"); Assert.Equal(serviceBusConnection, serviceBusExtensionConfig.Config.ConnectionString); }
public void UseServiceBus_ServiceBusConfigurationProvided_PerformsExpectedRegistration() { JobHostConfiguration config = new JobHostConfiguration(); IExtensionRegistry extensions = config.GetService <IExtensionRegistry>(); IExtensionConfigProvider[] configProviders = extensions.GetExtensions <IExtensionConfigProvider>().ToArray(); Assert.Empty(configProviders); ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration { ConnectionString = "test service bus connection" }; config.UseServiceBus(serviceBusConfig); // verify that the service bus config provider was registered configProviders = extensions.GetExtensions <IExtensionConfigProvider>().ToArray(); Assert.Single(configProviders); ServiceBusExtensionConfig serviceBusExtensionConfig = (ServiceBusExtensionConfig)configProviders.Single(); Assert.Same(serviceBusConfig, serviceBusExtensionConfig.Config); }
public int Launch(IApplicationContext context) { foreach (IExtension extension in _extensionRegistry.GetExtensions("jingxian.core.testSupport.autoTests")) { if (extension.Point == Constants.Points.XmlSchemas) { continue; } Console.WriteLine("创建对象 - {0}", extension.Id); ITester tester = extension.Build <ITester>(); tester.Test(); } return(0); }
private static HashSet <Assembly> GetJobTypeAssemblies(IExtensionRegistry extensions, params Type[] extensionTypes) { // create a set containing our own core assemblies HashSet <Assembly> assemblies = new HashSet <Assembly>(); assemblies.Add(typeof(BlobAttribute).Assembly); // add any extension assemblies foreach (Type extensionType in extensionTypes) { var currAssemblies = extensions.GetExtensions(extensionType).Select(p => p.GetType().Assembly); assemblies.UnionWith(currAssemblies); } return(assemblies); }
public static IBindingProvider Create( INameResolver nameResolver, IConverterManager converterManager, IStorageAccountProvider storageAccountProvider, IExtensionTypeLocator extensionTypeLocator, IContextGetter <IMessageEnqueuedWatcher> messageEnqueuedWatcherGetter, IContextGetter <IBlobWrittenWatcher> blobWrittenWatcherGetter, IExtensionRegistry extensions) { List <IBindingProvider> innerProviders = new List <IBindingProvider>(); if (converterManager == null) { converterManager = new ConverterManager(); } // Wire up new bindings var ruleQueueOutput = QueueBindingProvider.Build(storageAccountProvider, messageEnqueuedWatcherGetter, nameResolver, converterManager); innerProviders.Add(ruleQueueOutput); innerProviders.Add(new BlobAttributeBindingProvider(nameResolver, storageAccountProvider, extensionTypeLocator, blobWrittenWatcherGetter)); innerProviders.Add(TableAttributeBindingProvider.Build(nameResolver, converterManager, storageAccountProvider, extensions)); // add any registered extension binding providers foreach (IBindingProvider provider in extensions.GetExtensions(typeof(IBindingProvider))) { innerProviders.Add(provider); } innerProviders.Add(new CloudStorageAccountBindingProvider(storageAccountProvider)); innerProviders.Add(new CancellationTokenBindingProvider()); // The TraceWriter binder handles all remaining TraceWriter/TextWriter parameters. It must come after the // Blob binding provider; otherwise bindings like Do([Blob("a/b")] TextWriter blob) wouldn't work. innerProviders.Add(new TraceWriterBindingProvider()); ContextAccessor <IBindingProvider> bindingProviderAccessor = new ContextAccessor <IBindingProvider>(); innerProviders.Add(new RuntimeBindingProvider(bindingProviderAccessor)); innerProviders.Add(new DataBindingProvider()); IBindingProvider bindingProvider = new CompositeBindingProvider(innerProviders); bindingProviderAccessor.SetValue(bindingProvider); return(bindingProvider); }
internal void Initialize() { foreach (var extension in _extensionRegistry.GetExtensions<IExtensionConfigProvider>()) { this.AddExtension(extension); } this._root = _bindingProvider; // Populate assembly resolution from converters. if (_converter != null) { // _converter.AddAssemblies((type) => AddAssembly(type)); } AddTypesFromGraph(_bindingProvider as IBindingRuleProvider); }
internal static XmlSchema CreateFromContributions(IExtensionRegistry registry, IBundleService bundleService, IAssemblyLoaderService assemblyLoader) { IExtension[] extensions = registry.GetExtensions(Constants.Points.XmlSchemas); XmlSchema extensionSchema = new XmlSchema(); XmlSchema[] contributedSchemas = GetContributedXmlSchemas(extensions, bundleService, assemblyLoader); for (int i = 0; i < contributedSchemas.Length; i++) { CopyAllItemTypes(contributedSchemas[i], extensionSchema.Items); } extensionSchema.AttributeFormDefault = XmlSchemaForm.Unqualified; extensionSchema.ElementFormDefault = XmlSchemaForm.Qualified; extensionSchema.Version = typeof(ExtensionXmlSchema).Assembly.GetName().Version.ToString(); extensionSchema.Namespaces.Add(string.Empty, RuntimeConstants.CurrentXmlSchemaNamespace); extensionSchema.TargetNamespace = RuntimeConstants.CurrentXmlSchemaNamespace; return(extensionSchema); }
public static IBindingProvider Create( INameResolver nameResolver, ILoggerFactory loggerFactory, IStorageAccountProvider storageAccountProvider, IExtensionTypeLocator extensionTypeLocator, IContextGetter <IBlobWrittenWatcher> blobWrittenWatcherGetter, IExtensionRegistry extensions) { List <IBindingProvider> innerProviders = new List <IBindingProvider>(); innerProviders.Add(new BlobAttributeBindingProvider(nameResolver, storageAccountProvider, extensionTypeLocator, blobWrittenWatcherGetter)); // add any registered extension binding providers // Queue and Table bindings were added as an extension, so those rules get included here. foreach (IBindingProvider provider in extensions.GetExtensions(typeof(IBindingProvider))) { innerProviders.Add(provider); } innerProviders.Add(new CloudStorageAccountBindingProvider(storageAccountProvider)); innerProviders.Add(new CancellationTokenBindingProvider()); // The TraceWriter binder handles all remaining TraceWriter/TextWriter parameters. It must come after the // Blob binding provider; otherwise bindings like Do([Blob("a/b")] TextWriter blob) wouldn't work. innerProviders.Add(new TraceWriterBindingProvider(loggerFactory)); innerProviders.Add(new LoggerBindingProvider(loggerFactory)); ContextAccessor <IBindingProvider> bindingProviderAccessor = new ContextAccessor <IBindingProvider>(); innerProviders.Add(new RuntimeBindingProvider(bindingProviderAccessor)); innerProviders.Add(new DataBindingProvider()); IBindingProvider bindingProvider = new CompositeBindingProvider(innerProviders); bindingProviderAccessor.SetValue(bindingProvider); return(bindingProvider); }
public void Initialize_PerformsExpectedRegistrations() { var host = new HostBuilder() .ConfigureDefaultTestHost(builder => { builder.AddEventHubs(); }) .ConfigureServices(c => { c.AddSingleton <INameResolver>(new RandomNameResolver()); }) .Build(); IExtensionRegistry extensions = host.Services.GetService <IExtensionRegistry>(); // ensure the EventHubTriggerAttributeBindingProvider was registered var triggerBindingProviders = extensions.GetExtensions <ITriggerBindingProvider>().ToArray(); EventHubTriggerAttributeBindingProvider triggerBindingProvider = triggerBindingProviders.OfType <EventHubTriggerAttributeBindingProvider>().Single(); Assert.NotNull(triggerBindingProvider); // ensure the EventProcessorOptions ExceptionReceived event is wired up var options = host.Services.GetService <IOptions <EventHubOptions> >().Value; var eventProcessorOptions = options.EventProcessorOptions; var ex = new EventHubsException(false, "Kaboom!"); var ctor = typeof(ExceptionReceivedEventArgs).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance).Single(); var args = (ExceptionReceivedEventArgs)ctor.Invoke(new object[] { "TestHostName", "TestPartitionId", ex, "TestAction" }); var handler = (Action <ExceptionReceivedEventArgs>)eventProcessorOptions.GetType().GetField("exceptionHandler", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(eventProcessorOptions); handler.Method.Invoke(handler.Target, new object[] { args }); string expectedMessage = "EventProcessorHost error (Action=TestAction, HostName=TestHostName, PartitionId=TestPartitionId)"; var logMessage = host.GetTestLoggerProvider().GetAllLogMessages().Single(); Assert.Equal(LogLevel.Error, logMessage.Level); Assert.Equal(expectedMessage, logMessage.FormattedMessage); Assert.Same(ex, logMessage.Exception); }
public CompositeBindingProvider Create() { List <IBindingProvider> innerProviders = new List <IBindingProvider>(); // add any registered extension binding providers // Queue and Table bindings were added as an extension, so those rules get included here. foreach (IBindingProvider provider in _extensions.GetExtensions(typeof(IBindingProvider))) { innerProviders.Add(provider); } ContextAccessor <IBindingProvider> bindingProviderAccessor = new ContextAccessor <IBindingProvider>(); innerProviders.Add(new RuntimeBindingProvider(bindingProviderAccessor)); // for IBinder, Binder // Pull existing ones already directly registered with DI innerProviders.AddRange(_existingProviders); var bindingProvider = new CompositeBindingProvider(innerProviders); bindingProviderAccessor.SetValue(bindingProvider); return(bindingProvider); }
public TableArgumentBindingExtensionProvider(IExtensionRegistry extensions) { _bindingExtensionsProviders = extensions.GetExtensions<IArgumentBindingProvider<ITableArgumentBinding>>(); }
public TableArgumentBindingExtensionProvider(IExtensionRegistry extensions) { _bindingExtensionsProviders = extensions.GetExtensions <IArgumentBindingProvider <ITableArgumentBinding> >(); }
public static int Launch(IApplicationContext context, ICommandLineArguments arguments) { int exitCode = 1; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Enforce.ArgumentNotNull <IApplicationContext>(context, "context"); Enforce.ArgumentNotNullOrEmpty(context.ApplicationLaunchableId, "context.ApplicationLaunchableId"); _logger.Debug("开始启动..."); try { using (KernelAdapter containerAdapter = new KernelAdapter()) { containerAdapter.Connect(typeof(IApplicationContext), context); containerAdapter.Connect(RuntimeConstants.AssemblyLoaderServiceId , typeof(IAssemblyLoaderService) , typeof(AssemblyLoaderService)); containerAdapter.Connect(RuntimeConstants.BundleServiceId , typeof(IBundleService) , typeof(BundleService)); containerAdapter.Connect(RuntimeConstants.ExtensionRegistryId , typeof(IExtensionRegistry) , typeof(ExtensionRegistry)); containerAdapter.Start(); IExtensionRegistry registry = containerAdapter.Get <IExtensionRegistry>(); IObjectBuilder builder = containerAdapter.Get <IObjectBuilder>(); using (IDisposable scope = containerAdapter.Lock()) { IExtension[] extensions = registry.GetExtensions(Constants.Points.Services); foreach (IExtension extension in extensions) { containerAdapter.Connect(extension.Id , getServiceTypes(builder, extension) , builder.GetType(extension.Implementation)); } List <object> services = new List <object>(); foreach (IExtension extension in extensions) { services.Add(containerAdapter.GetService(extension.Id)); } foreach (object instance in services) { MicroKernel.Start(instance, containerAdapter); } } IApplicationLaunchable launchable = BuildApplicationLaunchable(context, registry); exitCode = launchable.Launch(context); containerAdapter.Stop(); } } finally { const string exitMsg = "退出代码 {0}."; _logger.InfoFormat(exitMsg, exitCode); AppDomain.CurrentDomain.UnhandledException -= OnUnhandledException; } return(exitCode); }