public NinjectHandlerSource(IKernel kernel, ITypeVerbExtractor verbExtractor)
        {
            Assert.ArgumentNotNull(kernel, nameof(kernel));

            _kernel        = kernel;
            _verbExtractor = verbExtractor ?? TypeVerbExtractor.DefaultInstance;
            _nameMap       = SetupNameMapping();
        }
예제 #2
0
        public StructureMapHandlerSource(IServiceProvider serviceProvider, ITypeVerbExtractor verbExtractor)
        {
            Assert.ArgumentNotNull(serviceProvider, nameof(serviceProvider));

            _container = (serviceProvider as StructureMapServiceProvider)?.Container;
            if (_container == null)
            {
                throw new ArgumentException("Expected StructureMap Container", nameof(serviceProvider));
            }

            _verbExtractor = verbExtractor ?? TypeVerbExtractor.DefaultInstance;
            _nameMap       = SetupNameMapping();
        }
        /// <summary>
        /// Tell the HandlerSetup to use Ninject to scan for and resolve handler types in your solution.
        /// </summary>
        /// <param name="handlers"></param>
        /// <param name="kernel"></param>
        /// <param name="verbExtractor"></param>
        /// <returns></returns>
        public static IHandlerSetup UseNinjectHandlerSource(this IHandlerSetup handlers, IKernel kernel, ITypeVerbExtractor verbExtractor = null)
        {
            Assert.ArgumentNotNull(handlers, nameof(handlers));
            Assert.ArgumentNotNull(kernel, nameof(kernel));

            var source = new NinjectHandlerSource(kernel, verbExtractor);

            return(handlers.AddSource(source));
        }
        private IReadOnlyDictionary <string, VerbInfo> SetupVerbMapping(IServiceCollection services, ITypeVerbExtractor verbExtractor)
        {
            var handlerRegistrations = services.Where(sd => typeof(IHandlerBase).IsAssignableFrom(sd.ServiceType)).ToList();
            var instances            = handlerRegistrations
                                       .Where(sd => sd.ImplementationInstance != null)
                                       .SelectMany(sd =>
                                                   verbExtractor
                                                   .GetVerbs(sd.ImplementationInstance.GetType())
                                                   .Select(verb => new VerbInfo(verb, sd.ImplementationInstance.GetType()))
                                                   )
                                       .ToList();
            var types = handlerRegistrations
                        .Where(sd => sd.ImplementationType != null)
                        .SelectMany(sd =>
                                    verbExtractor
                                    .GetVerbs(sd.ImplementationType)
                                    .Select(verb => new VerbInfo(verb, sd.ImplementationType))
                                    )
                        .ToList();
            var factories = handlerRegistrations
                            .Where(sd => sd.ImplementationFactory != null && sd.ServiceType.IsClass && !sd.ServiceType.IsAbstract)
                            .SelectMany(sd =>
                                        verbExtractor
                                        .GetVerbs(sd.ServiceType)
                                        .Select(verb => new VerbInfo(verb, sd.ServiceType))
                                        )
                            .ToList();

            return(instances
                   .Concat(types)
                   .Concat(factories)
                   .ToDictionaryUnique(vi => vi.Verb, vi => vi));
        }
 public MicrosoftRegisteredHandlerSource(IServiceCollection services, Func <IServiceProvider> getProvider, ITypeVerbExtractor verbExtractor)
 {
     _getProvider = getProvider;
     _verbs       = SetupVerbMapping(services, verbExtractor);
 }
예제 #6
0
        public IHandlerSetup UseHandlerTypes(IEnumerable <Type> commandTypes, TypeInstanceResolver resolver = null, ITypeVerbExtractor verbExtractor = null)
        {
            Assert.ArgumentNotNull(commandTypes, nameof(commandTypes));
            var source = new TypeListConstructSource(commandTypes, resolver ?? _defaultResolver, verbExtractor);

            return(AddSource(source));
        }
예제 #7
0
 public UnityHandlerSource(IUnityContainer container, ITypeVerbExtractor verbExtractor)
 {
     _container     = container ?? throw new ArgumentNullException(nameof(container));
     _verbExtractor = verbExtractor ?? throw new ArgumentNullException(nameof(verbExtractor));
     _nameMap       = new Lazy <IReadOnlyDictionary <string, Type> >(SetupNameMapping);
 }
예제 #8
0
 public TypeListConstructSource(IEnumerable <Type> commandTypes, TypeInstanceResolver resolver, ITypeVerbExtractor verbExtractor)
 {
     _resolver = resolver ?? DefaultResolver;
     verbExtractor ??= TypeVerbExtractor.DefaultInstance;
     _commands = commandTypes
                 .OrEmptyIfNull()
                 .SelectMany(commandType =>
                             verbExtractor.GetVerbs(commandType)
                             .Select(verb => (verb, commandType))
                             )
                 .ToDictionaryUnique();
 }
예제 #9
0
 public LamarHandlerSource(IServiceProvider provider, ITypeVerbExtractor verbExtractor)
 {
     _container     = provider as IContainer ?? throw new ArgumentException("Expected a Lamar Container", nameof(provider));
     _verbExtractor = verbExtractor ?? TypeVerbExtractor.DefaultInstance;
     _nameMap       = new Lazy <IReadOnlyDictionary <string, Type> >(SetupNameMapping);
 }