예제 #1
0
        /// <summary>
        /// 将使用"自动注册类型特性"的类注入容器
        /// </summary>
        private static void AutoRegister(Assembly[] currentAssemblies, ContainerBuilder builder)
        {
            var searchPlatform = ComponentPlatform.Default;
            ComponentPlatform autoFacePlatform = (ComponentPlatform)Common.CommFun.getAppSettings <int>("IocPlatformId");//平台

            var drTypes = currentAssemblies.Where(x => !x.IsDynamic).SelectMany(x => x.GetExportedTypes());

            do//循环首次只注入默认实现,第二次注入autoFacePlatform平台实现
            {
                foreach (var type in drTypes)
                {
                    var autoRegisterAttribute = type.GetCustomAttribute <AutoRegisterAttribute>(false);
                    if (autoRegisterAttribute == null)
                    {
                        continue;
                    }

                    //只注入默认实现
                    if (!autoRegisterAttribute.AutoFacePlatform.Equals(searchPlatform))
                    {
                        continue;
                    }

                    if (string.IsNullOrEmpty(autoRegisterAttribute.Name))
                    {
                        var registrationBuilder = builder.RegisterType(type).As(type.GetInterfaces()).PerLifeStyle(autoRegisterAttribute.LifeStyle);
                        WithParameter(autoRegisterAttribute, registrationBuilder);
                    }
                    else
                    {
                        foreach (var interfaceType in type.GetInterfaces())
                        {
                            var registrationBuilder = builder.RegisterType(type).Keyed(autoRegisterAttribute.Name, interfaceType).PerLifeStyle(autoRegisterAttribute.LifeStyle);
                            WithParameter(autoRegisterAttribute, registrationBuilder);
                        }
                    }
                }
            } while (!searchPlatform.Equals(autoFacePlatform) && (searchPlatform = autoFacePlatform).Equals(autoFacePlatform));
        }
예제 #2
0
 public AutoRegisterAttribute(ComponentLifeStyle lifeStyle, ComponentPlatform autoFacePlatform = ComponentPlatform.Default)
 {
     this.LifeStyle        = lifeStyle;
     this.AutoFacePlatform = autoFacePlatform;
 }