Beispiel #1
0
 /// <summary>
 /// </summary>
 /// <param name="configuration"></param>
 /// <param name="register"></param>
 /// <returns></returns>
 public static IIocAppConfiguration Register(this IIocAppConfiguration configuration,
                                             Action <IIocRegistrar> register)
 {
     Ensure.NotNull(configuration, nameof(configuration));
     Ensure.NotNull(register, nameof(register));
     register(configuration.Registrar);
     return(configuration);
 }
Beispiel #2
0
        public static IIocAppConfiguration UseNLog(this IIocAppConfiguration configuration, string configFile = null)
        {
            if (!string.IsNullOrEmpty(configFile))
            {
                LoggerFactory.SetXmlConfigFile(configFile);
            }

            configuration.Registrar.Register <ILoggerFactory, LoggerFactory>(LifetimeType.Singleton);
            return(configuration);
        }
Beispiel #3
0
        public static IIocAppConfiguration AddHttpAuthentication(this IIocAppConfiguration configuration)
        {
            Ensure.NotNull(configuration, nameof(configuration));
            var registrar = configuration.Registrar;

            registrar.Register <IHttpContextAccessor, HttpContextAccessor>(LifetimeType.Singleton);
            registrar.Register <IAuthenticationService, HttpAuthenticationService>(LifetimeType.Singleton);
            registrar.Register <IPrincipalAccessor, HttpPrincipalAccessor>(LifetimeType.Singleton);
            registrar.Register <IQimSession, ClaimsSession>(LifetimeType.Singleton);
            return(configuration);
        }
Beispiel #4
0
        public static IIocAppConfiguration RunStartupTask(this IIocAppConfiguration configuration)
        {
            var tasks = configuration.Resolver.GetAllServices <IStartupTask>().OrderBy(a => a.Order);

            foreach (var task in tasks)
            {
                task.Execute(configuration);
            }

            return(configuration);
        }
Beispiel #5
0
        public static IIocAppConfiguration Start(Func <IAppConfiguration, IIocAppConfiguration> configAction)
        {
            Ensure.NotNull(configAction, nameof(configAction));
            if (_configuration != null)
            {
                return(_configuration);                        //确保只执行一次
            }
            _configuration = configAction(AppConfiguration);

            _configuration.Registrar.RegisterInstance(Configuration);
            return(_configuration);
        }
Beispiel #6
0
        public static IIocAppConfiguration LoadSettings(this IIocAppConfiguration configuration, string settingText)
        {
            Ensure.NotNull(configuration, nameof(configuration));
            Ensure.NotNullOrWhiteSpace(settingText, nameof(settingText));
            var appSettings = JsonConvert.DeserializeObject <AppSettings>(settingText, new Runtime.Serialization.StringTypeConverter());

            if (appSettings == null)
            {
                throw new AppException($"Load app settings failed.The setting text is: {settingText}");
            }
            return(LoadSettings(configuration, appSettings));
        }
Beispiel #7
0
        public static IIocAppConfiguration UserAutoMapper(this IIocAppConfiguration configuration)
        {
            Ensure.NotNull(configuration, nameof(configuration));
            var registrar = configuration.Registrar;

            registrar.Register <IObjectMapper, AutoMapperObjectMapper>(LifetimeType.Singleton);
            var typeFinder = configuration.Resolver.GetService <ITypeFinder>();

            CreateMapping(typeFinder);
            registrar.RegisterInstance(Mapper.Instance);
            return(configuration);
        }
Beispiel #8
0
        public static IServiceProvider BuildServiceProvider(this IIocAppConfiguration configuration,
                                                            IEnumerable <ServiceDescriptor> descriptors)
        {
            Ensure.NotNull(configuration, nameof(configuration));
            var register = configuration.Registrar;

            register.Register <IServiceScopeFactory, ServiceScopeFactory>();
            register.Register <IServiceProvider, ServiceProvider>();
            register.Populate(descriptors);
            //register.Replace(typeof(IModelMetadataProvider), typeof(ExtendedModelMetadataProvider), lifetime: LifetimeType.Singleton);

            return(configuration.Resolver.GetService <IServiceProvider>());
        }
Beispiel #9
0
        private static IIocAppConfiguration Register(
            this IIocAppConfiguration configuration,
            IEnumerable <ServiceDescriptor> descriptors)
        {
            var manager = (IocManager)configuration.Registrar;

            foreach (var descriptor in descriptors)
            {
                var uniqueName = descriptor.ServiceType.FullName + "_" + Guid.NewGuid();

                var lifetime = GetLifetimeType(descriptor.Lifetime);
                if (descriptor.ImplementationType != null)
                {
                    manager.IocContainer.Register(
                        Component.For(descriptor.ServiceType)
                        //.Named(uniqueName)
                        .NamedAutomatically(uniqueName)
                        .IsDefault()
                        .ImplementedBy(descriptor.ImplementationType)
                        .ApplyLifestyle(lifetime));
                }
                else if (descriptor.ImplementationFactory != null)
                {
                    manager.IocContainer.Register(Component.For(descriptor.ServiceType).UsingFactoryMethod(
                                                      (kernel, context) => descriptor.ImplementationFactory(kernel.Resolve <IServiceProvider>())
                                                      ).ApplyLifestyle(lifetime).IsDefault());
                }
                else
                {
                    manager.IocContainer.Register(
                        Component.For(descriptor.ServiceType)
                        .NamedAutomatically(uniqueName)
                        .IsDefault()
                        .Instance(descriptor.ImplementationInstance)
                        .ApplyLifestyle(lifetime)
                        );
                }
            }

            return(configuration);
        }
Beispiel #10
0
        public static IIocAppConfiguration LoadSettings(this IIocAppConfiguration configuration, AppSettings appSettings)
        {
            Ensure.NotNull(configuration, nameof(configuration));
            Ensure.NotNull(appSettings, nameof(appSettings));
            configuration.DefaultNameOrConnectionString = appSettings.ConnectionString;
            var taskInterface = typeof(IStartupTask);

            if (appSettings.StartupTasks != null)
            {
                foreach (var task in appSettings.StartupTasks)
                {
                    var taskType = GetTypeFromString(task.Type);
                    if (!taskInterface.IsAssignableFrom(taskType))
                    {
                        throw new InvalidOperationException($"The type must be assigned from IStartupTask. ");
                    }
                    configuration.Registrar.RegisterType(taskInterface, taskType, task.Name);
                }
            }
            if (appSettings.Components != null)
            {
                foreach (var item in appSettings.Components)
                {
                    var type = GetTypeFromString(item.Type);

                    if (!string.IsNullOrWhiteSpace(item.ServiceType))
                    {
                        var serviceType = GetTypeFromString(item.ServiceType);
                        configuration.Registrar.RegisterType(serviceType, type, item.Name);
                    }
                    else
                    {
                        configuration.Registrar.RegisterType(type, item.Name);
                    }
                }
            }
            return(configuration);
        }
Beispiel #11
0
        public static IIocAppConfiguration UseEntityFrameworkCore(this IIocAppConfiguration configuration,
                                                                  Action <DbContextConfiguration> action, string connectionString = null)
        {
            Ensure.NotNull(configuration, nameof(configuration));

            Ensure.NotNull(action, nameof(action));
            if (string.IsNullOrEmpty(connectionString))
            {
                connectionString = configuration.DefaultNameOrConnectionString;
            }

            DbContextConfigurer.Instance.Init(connectionString, action);

            configuration.Registrar.Register <IDbContextProvider, UnitOfWorkDbContextProvider>();
            configuration.Registrar.Register <IDbContextResolver, DbContextResolver>();
            configuration.Registrar.Register <IUnitOfWork, EfCoreUnitOfWork>();
            configuration.Registrar.Register <IUnitOfWorkManager, UnitOfWorkManager>();
            configuration.Registrar.Register <ICurrentUnitOfWorkProvider, CurrentUnitOfWorkProvider>(LifetimeType.Singleton);
            configuration.Registrar.Register <IConnectionStringResolver, ConnectionStringResolver>();
            configuration.Registrar.Register <EfCoreDbContext, EfCoreDbContext>();
            configuration.Registrar.RegisterType(typeof(IRepository <,>), typeof(EfCoreRepository <,>));
            return(configuration);
        }
Beispiel #12
0
 public static IIocAppConfiguration UseEmptyLogger(this IIocAppConfiguration configuration)
 {
     configuration.Registrar.Register <ILoggerFactory, EmptyLoggerFactory>(LifetimeType.Singleton);
     return(configuration);
 }
Beispiel #13
0
 public void Execute(IIocAppConfiguration configuration)
 {
     configuration.Registrar.Register <IUserRepository, UserRepository>();
     configuration.Registrar.Register <IGlobalAccountRepository, GlobalAccountRepository>();
 }
Beispiel #14
0
 public void Execute(IIocAppConfiguration configuration)
 {
     configuration.Registrar.Register <IUserManager, UserManager>();
     configuration.Registrar.Register <IUserService, UserService>();
 }