/// <summary>
        /// RegisterTypeAsImplementedInterfaces
        /// </summary>
        /// <param name="services">services</param>
        /// <param name="typesFilter">filter types to register</param>
        /// <param name="interfaceTypeFilter">filter interface types to register</param>
        /// <param name="serviceLifetime">service lifetime</param>
        /// <param name="assemblies">assemblies</param>
        /// <returns>services</returns>
        public static IServiceContainerBuilder RegisterAssemblyTypesAsImplementedInterfaces([NotNull] this IServiceContainerBuilder services, Func <Type, bool>?typesFilter, Func <Type, bool>?interfaceTypeFilter, ServiceLifetime serviceLifetime, params Assembly[] assemblies)
        {
            Guard.NotNull(assemblies, nameof(assemblies));
            if (assemblies.Length == 0)
            {
                assemblies = ReflectHelper.GetAssemblies();
            }

            var types = assemblies
                        .Select(assembly => assembly.GetTypes())
                        .SelectMany(t => t)
                        .Where(t => !t.IsAbstract)
            ;

            if (typesFilter != null)
            {
                types = types.Where(typesFilter);
            }

            foreach (var type in types)
            {
                foreach (var implementedInterface in type.GetImplementedInterfaces())
                {
                    if (interfaceTypeFilter?.Invoke(implementedInterface) != false)
                    {
                        services.Add(new ServiceDefinition(implementedInterface, type, serviceLifetime));
                    }
                }
            }

            return(services);
        }
        public static IServiceContainerBuilder AddProxyService <TService>(this IServiceContainerBuilder serviceCollection, ServiceLifetime serviceLifetime)
            where TService : class
        {
            serviceCollection.Add(new ServiceDefinition(typeof(TService), sp =>
            {
                var proxyFactory = sp.ResolveRequiredService <IProxyFactory>();
                return(proxyFactory.CreateProxy <TService>());
            }, serviceLifetime));

            return(serviceCollection);
        }
コード例 #3
0
 /// <summary>
 /// RegisterTypeAsImplementedInterfaces
 /// </summary>
 /// <param name="services">services</param>
 /// <param name="type">type</param>
 /// <param name="serviceLifetime">service lifetime</param>
 /// <returns>services</returns>
 public static IServiceContainerBuilder RegisterTypeAsImplementedInterfaces([NotNull] this IServiceContainerBuilder services, Type type, ServiceLifetime serviceLifetime = ServiceLifetime.Singleton)
 {
     if (type != null)
     {
         foreach (var interfaceType in type.GetImplementedInterfaces())
         {
             services.Add(new ServiceDefinition(interfaceType, type, serviceLifetime));
         }
     }
     return(services);
 }
コード例 #4
0
 /// <summary>
 /// RegisterTypeAsImplementedInterfaces
 /// </summary>
 /// <param name="services">services</param>
 /// <param name="type">type</param>
 /// <param name="interfaceTypeFilter">interfaceTypeFilter</param>
 /// <param name="serviceLifetime">service lifetime</param>
 /// <returns>services</returns>
 public static IServiceContainerBuilder RegisterTypeAsImplementedInterfaces(this IServiceContainerBuilder services, Type type, Func <Type, bool>?interfaceTypeFilter, ServiceLifetime serviceLifetime = ServiceLifetime.Singleton)
 {
     Guard.NotNull(type);
     foreach (var interfaceType in type.GetImplementedInterfaces())
     {
         if (interfaceTypeFilter?.Invoke(interfaceType) != false)
         {
             services.Add(new ServiceDefinition(interfaceType, type, serviceLifetime));
         }
     }
     return(services);
 }
コード例 #5
0
        /// <summary>
        /// RegisterAssemblyTypes
        /// </summary>
        /// <param name="services">services</param>
        /// <param name="typesFilter">filter types to register</param>
        /// <param name="serviceLifetime">service lifetime</param>
        /// <param name="assemblies">assemblies</param>
        /// <returns>services</returns>
        public static IServiceContainerBuilder RegisterAssemblyTypes([NotNull] this IServiceContainerBuilder services, Func <Type, bool> typesFilter, ServiceLifetime serviceLifetime, params Assembly[] assemblies)
        {
            if (assemblies == null || assemblies.Length == 0)
            {
                assemblies = ReflectHelper.GetAssemblies();
            }

            var types = assemblies
                        .Select(assembly => assembly.GetExportedTypes())
                        .SelectMany(t => t);

            if (typesFilter != null)
            {
                types = types.Where(typesFilter);
            }

            foreach (var type in types)
            {
                services.Add(new ServiceDefinition(type, type, serviceLifetime));
            }

            return(services);
        }
コード例 #6
0
 public static IServiceContainerBuilder AddSingleton <TService>([NotNull] this IServiceContainerBuilder serviceContainerBuilder, [NotNull] TService service)
 {
     serviceContainerBuilder.Add(new ServiceDefinition(service, typeof(TService)));
     return(serviceContainerBuilder);
 }
コード例 #7
0
 public static IServiceContainerBuilder AddTransient <TService, TServiceImplement>(this IServiceContainerBuilder serviceContainerBuilder) where TServiceImplement : TService
 {
     serviceContainerBuilder.Add(ServiceDefinition.Transient <TService, TServiceImplement>());
     return(serviceContainerBuilder);
 }
コード例 #8
0
 public static IServiceContainerBuilder AddTransient <TService>(this IServiceContainerBuilder serviceContainerBuilder)
 {
     serviceContainerBuilder.Add(ServiceDefinition.Transient <TService>());
     return(serviceContainerBuilder);
 }
 public static IServiceContainerBuilder AddScoped([NotNull] this IServiceContainerBuilder serviceContainerBuilder, [NotNull] Type serviceType, [NotNull] Type implementType)
 {
     serviceContainerBuilder.Add(new ServiceDefinition(serviceType, implementType, ServiceLifetime.Scoped));
     return(serviceContainerBuilder);
 }
コード例 #10
0
 public static IServiceContainerBuilder AddTransient(this IServiceContainerBuilder serviceContainerBuilder, Type serviceType, Type implementType)
 {
     serviceContainerBuilder.Add(new ServiceDefinition(serviceType, implementType, ServiceLifetime.Transient));
     return(serviceContainerBuilder);
 }
コード例 #11
0
 public static IServiceContainerBuilder AddScoped <TService>(this IServiceContainerBuilder serviceContainerBuilder)
 {
     serviceContainerBuilder.Add(ServiceDefinition.Scoped <TService>());
     return(serviceContainerBuilder);
 }
コード例 #12
0
 public static IServiceContainerBuilder AddSingleton(this IServiceContainerBuilder serviceContainerBuilder, Type serviceType)
 {
     serviceContainerBuilder.Add(new ServiceDefinition(serviceType, ServiceLifetime.Singleton));
     return(serviceContainerBuilder);
 }
 public static IServiceContainerBuilder AddTransient([NotNull] this IServiceContainerBuilder serviceContainerBuilder, [NotNull] Type serviceType)
 {
     serviceContainerBuilder.Add(new ServiceDefinition(serviceType, ServiceLifetime.Transient));
     return(serviceContainerBuilder);
 }
 public static IServiceContainerBuilder AddScoped <TService, TServiceImplement>([NotNull] this IServiceContainerBuilder serviceContainerBuilder) where TServiceImplement : TService
 {
     serviceContainerBuilder.Add(ServiceDefinition.Scoped <TService, TServiceImplement>());
     return(serviceContainerBuilder);
 }
 public static IServiceContainerBuilder AddScoped <TService>([NotNull] this IServiceContainerBuilder serviceContainerBuilder, [NotNull] Func <IServiceProvider, object> func)
 {
     serviceContainerBuilder.Add(ServiceDefinition.Scoped <TService>(func));
     return(serviceContainerBuilder);
 }
コード例 #16
0
 public static IServiceContainerBuilder AddTransient <TService>(this IServiceContainerBuilder serviceContainerBuilder, Func <IServiceProvider, object> func)
 {
     serviceContainerBuilder.Add(ServiceDefinition.Transient <TService>(func));
     return(serviceContainerBuilder);
 }
 public static IServiceContainerBuilder AddSingleton <TService>([NotNull] this IServiceContainerBuilder serviceContainerBuilder)
 {
     serviceContainerBuilder.Add(ServiceDefinition.Singleton <TService>());
     return(serviceContainerBuilder);
 }