/// <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)); }
public AutoRegisterAttribute(ComponentLifeStyle lifeStyle, ComponentPlatform autoFacePlatform = ComponentPlatform.Default) { this.LifeStyle = lifeStyle; this.AutoFacePlatform = autoFacePlatform; }