public RegisterAdministrativeEmployeeUserControl(IAfterRegister afterRegister)
 {
     InitializeComponent();
     _afterRegister = afterRegister;
     TypeOfUserComboBox.Visibility = Visibility.Hidden;
     TypeUserText.Text            += " Superusuario.";
 }
 public RegisterTicketUserControl(IAfterRegister afterRegister, CloseAction closeAction) : this()
 {
     _afterRegister = afterRegister;
     _closeAction   = closeAction;
 }
예제 #3
0
        /// <summary>
        /// Ioc容器初始化
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public IServiceProvider Initialize(IServiceCollection services)
        {
            var builder = new ContainerBuilder();

            var AssemblyFinder = CurrentDomainAssemblyFinder.Instance;
            var typeFinder     = TypeFinder.Instance;

            builder.RegisterInstance(AssemblyFinder).As <IAssemblyFinder>().SingleInstance().PropertiesAutowired();
            builder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance().PropertiesAutowired();
            builder.RegisterInstance(Instance).As <IIocManager>().SingleInstance().PropertiesAutowired();

            var listAllType = typeFinder.FindAll();

            //找到所有外部IDependencyRegistrar实现,调用注册
            var registrarType          = typeof(IDependencyRegistrar);
            var arrRegistrarType       = listAllType.Where(t => registrarType.IsAssignableFrom(t) && t != registrarType).ToArray();
            var listRegistrarInstances = new List <IDependencyRegistrar>();

            foreach (var drType in arrRegistrarType)
            {
                listRegistrarInstances.Add((IDependencyRegistrar)Activator.CreateInstance(drType));
            }
            //排序
            listRegistrarInstances = listRegistrarInstances.OrderBy(t => t.Order).ToList();
            foreach (var dependencyRegistrar in listRegistrarInstances)
            {
                dependencyRegistrar.Register(builder, typeFinder);
            }

            var arrAfterRegistrarType = listAllType.Where(t => typeof(IAfterRegister).IsAssignableFrom(t) &&
                                                          t != typeof(IAfterRegister)).ToArray();
            List <IAfterRegister> afterRegisters = new List <IAfterRegister>();
            IAfterRegister        afterRegister  = null;

            foreach (var item in arrAfterRegistrarType)
            {
                afterRegister = (IAfterRegister)Activator.CreateInstance(item);
                afterRegisters.Add(afterRegister);
                builder.RegisterInstance(afterRegister).As <IAfterRegister>()
                .SingleInstance().PropertiesAutowired();
            }
            RegisterExtend.afterRegisters = afterRegisters;
            //注册ITransientDependency实现类
            var dependencyType = typeof(ITransientDependency);
            //注册ISingletonDependency实现类
            var  singletonDependencyType = typeof(ISingletonDependency);
            bool bClassRegister = false, bISingletonRegister = false, bTransientRegister = false;
            IRegistrationBuilder <object, ScanningActivatorData, DynamicRegistrationStyle> builderRegister = null;

            foreach (var type in listAllType)
            {
                bTransientRegister  = dependencyType.IsAssignableFrom(type) && type != dependencyType;
                bISingletonRegister = singletonDependencyType.IsAssignableFrom(type) && type != singletonDependencyType;
                if (!bTransientRegister && !bISingletonRegister)
                {
                    continue;
                }
                bClassRegister  = type.IsClass && !type.IsAbstract && !type.BaseType.IsInterface && type.BaseType != typeof(object);
                builderRegister = builder.RegisterTypes(type);
                if (!bClassRegister)
                {
                    builderRegister = builderRegister.AsImplementedInterfaces();
                }
                else
                {
                    builderRegister = builderRegister.As(type.BaseType);
                }
                if (bTransientRegister)
                {
                    builderRegister = builderRegister.InstancePerLifetimeScope();
                }
                else
                {
                    builderRegister = builderRegister.SingleInstance();
                }
                builderRegister = builderRegister.PropertiesAutowired().OtherRegister(type);
            }
            builder.Populate(services);
            _container = builder.Build();
            return(new AutofacServiceProvider(_container));
        }