public async Task <IListener> CreateAsync(CancellationToken cancellationToken) { List <IListener> listeners = new List <IListener>(); foreach (IFunctionDefinition functionDefinition in _functionDefinitions) { IListenerFactory listenerFactory = functionDefinition.ListenerFactory; if (listenerFactory == null) { continue; } // Determine if the function is disabled MethodInfo method = functionDefinition.Descriptor.Method; if (IsDisabled(method, _nameResolver, _activator)) { _trace.Info(string.Format("Function '{0}' is disabled", functionDefinition.Descriptor.ShortName), TraceSource.Host); continue; } IListener listener = await listenerFactory.CreateAsync(cancellationToken); // if the listener is a Singleton, wrap it with our SingletonListener SingletonAttribute singletonAttribute = SingletonManager.GetListenerSingletonOrNull(listener.GetType(), method); if (singletonAttribute != null) { listener = new SingletonListener(method, singletonAttribute, _singletonManager, listener); } listeners.Add(listener); } return(new CompositeListener(listeners)); }
public void GetListenerSingletonOrNull_ReturnsListenerClassSingleton() { MethodInfo method = this.GetType().GetMethod("TestJob", BindingFlags.Static | BindingFlags.NonPublic); SingletonAttribute attribute = SingletonManager.GetListenerSingletonOrNull(typeof(TestListener), method); Assert.Equal("Listener", attribute.Scope); }
public void GetListenerSingletonOrNull_MethodSingletonTakesPrecedence() { MethodInfo method = this.GetType().GetMethod("TestJob_ListenerSingleton", BindingFlags.Static | BindingFlags.NonPublic); SingletonAttribute attribute = SingletonManager.GetListenerSingletonOrNull(typeof(TestListener), method); Assert.Equal("Function", attribute.Scope); }
public void GetListenerSingletonOrNull_ThrowsOnMultiple() { MethodInfo method = this.GetType().GetMethod("TestJob_MultipleListenerSingletons", BindingFlags.Static | BindingFlags.NonPublic); NotSupportedException exception = Assert.Throws <NotSupportedException>(() => { SingletonManager.GetListenerSingletonOrNull(typeof(TestListener), method); }); Assert.Equal("Only one SingletonAttribute using mode 'Listener' is allowed.", exception.Message); }
public async Task <IListener> CreateAsync(CancellationToken cancellationToken) { List <IListener> listeners = new List <IListener>(); foreach (IFunctionDefinition functionDefinition in _functionDefinitions) { // Determine if the function is disabled if (functionDefinition.Descriptor.IsDisabled) { string msg = string.Format("Function '{0}' is disabled", functionDefinition.Descriptor.ShortName); _trace.Info(msg, TraceSource.Host); _logger?.LogInformation(msg); continue; } IListenerFactory listenerFactory = functionDefinition.ListenerFactory; if (listenerFactory == null) { continue; } IListener listener = await listenerFactory.CreateAsync(cancellationToken); // if the listener is a Singleton, wrap it with our SingletonListener SingletonAttribute singletonAttribute = SingletonManager.GetListenerSingletonOrNull(listener.GetType(), functionDefinition.Descriptor); if (singletonAttribute != null) { listener = new SingletonListener(functionDefinition.Descriptor, singletonAttribute, _singletonManager, listener, _trace, _loggerFactory); } // wrap the listener with a function listener to handle exceptions listener = new FunctionListener(listener, functionDefinition.Descriptor, _trace, _loggerFactory); listeners.Add(listener); } return(new CompositeListener(listeners)); }