private static IUnityContainer BuildUnityContainer() { var container = new UnityContainer(); AccesorsBuilder.RegisterAccesorsDependencies(container); BusinessBuilder.RegisterBusinessDependencies(container); SecurityBuilder.RegisterServiceDependencies(container); SecurityBuilder.RegisterProviderDependencies(container); App_Start.MvcUnityContainer.Container = container; Resolve(container); return(container); }
public string CreateAssemblyAttributes() { #region GetVersion Version ver = BusinessBuilder.GetVersion(AdmiralEnvironment.UserDefineBusinessFile); if (ver != null) { ver = new Version(ver.Major + 1, ver.Minor, ver.Build, ver.Revision); } else { ver = new Version(1, 0, 0, 0); } #endregion return($"[assembly: {typeof(AssemblyVersionAttribute).FullName}(\"{ver.ToString()}\")]\n"); }
public void CreateAssembyInfoDocument() { #region GetVersion var ver = BusinessBuilder.GetVersion(AdmiralEnvironment.UserDefineBusinessFile); if (ver != null) { ver = new Version(ver.Major + 1, ver.Minor, ver.Build, ver.Revision); } else { ver = new Version(1, 0, 0, 0); } #endregion var str = $"[assembly: {typeof (AssemblyVersionAttribute).FullName}(\"{ver.ToString()}\")]\n"; Workspace.AddDocument(ModuleProject.Id, "AssemblyInfo.cs", SourceText.From(str, Encoding.UTF8)); }
/// <summary> /// 生成实体代码 /// </summary> /// <param name="project"></param> /// <param name="schema"></param> public override void CreateEntityCode(ProjectConfig project, EntityConfig schema) { Message = schema.Caption; var path = project.ModelPath; var entityPath = IOHelper.CheckPath(path, "DataModel"); { var builder = new EntityBuilder { Entity = schema, Project = project }; builder.CreateBaseCode(entityPath); builder.CreateExtendCode(entityPath); } if (schema.IsClass) { return; } var exPath = IOHelper.CheckPath(path, "Extend"); { var builder = new EntityExtendBuilder { Entity = schema, Project = project }; builder.CreateBaseCode(exPath); builder.CreateExtendCode(exPath); } var coPath = IOHelper.CheckPath(path, "Combo"); { var builder = new EntityComboBuilder { Entity = schema, Project = project }; builder.CreateExtendCode(coPath); } var accessPath = IOHelper.CheckPath(path, "DataAccess"); if (project.DbType == DataBaseType.MySql) { var builder = new MySqlAccessBuilder { Entity = schema, Project = project }; builder.CreateBaseCode(accessPath); builder.CreateExtendCode(accessPath); } else { var builder = new SqlServerAccessBuilder { Entity = schema, Project = project }; builder.CreateBaseCode(accessPath); builder.CreateExtendCode(accessPath); } //if (!string.IsNullOrEmpty(project.BusinessPath)) { var businessPath = IOHelper.CheckPath( IOHelper.CheckPath(Solution.IsWeb ? project.ModelPath : project.BusinessPath, "Business")); var builder = new BusinessBuilder { Entity = schema, Project = project }; builder.CreateBaseCode(businessPath); builder.CreateExtendCode(businessPath); } var pg = new PageGenerator { Entity = schema, Project = project }; pg.CreateExtendCode(IOHelper.CheckPath(Solution.IsWeb ? project.ModelPath : project.BusinessPath)); pg.CreateBaseCode(project.PagePath); }
private void GenerateModuleAssembly() { #region GetVersion Version ver = BusinessBuilder.GetVersion(AdmiralEnvironment.UserDefineBusinessFile); if (ver != null) { ver = new Version(ver.Major + 1, ver.Minor, ver.Build, ver.Revision); } else { ver = new Version(1, 0, 0, 0); } #endregion var assemblyName = "AdmiralDynamicDC"; var newFileName = AdmiralEnvironment.UserDefineBusinessTempFile.FullName; #region 定义程序集 var asmName = new AssemblyNameDefinition(assemblyName, ver); //[assembly: AssemblyFileVersionAttribute("1.0.0.12")] var assembly = AssemblyDefinition.CreateAssembly( asmName, "MainModule", ModuleKind.Dll ); //AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Save, AdmiralEnvironment.UserDefineBusinessDirectoryInfo.FullName); #region 定义模块 var module = assembly.MainModule; #endregion #endregion #region 设置文件版本 var asmFileVerCtor = typeof(SR.AssemblyFileVersionAttribute).GetConstructor(new[] { typeof(string) }); var asmFileVerCtorRef = assembly.MainModule.ImportReference(asmFileVerCtor); var ca = new Mono.Cecil.CustomAttribute(asmFileVerCtorRef); ca.ConstructorArguments.Add(new CustomAttributeArgument( assembly.MainModule.ImportReference(typeof(string)), ver.ToString())); assembly.CustomAttributes.Add(ca); #endregion #region XafModule var xafModule = new TypeDefinition("", "RuntimeModule", TypeAttributes.Public | TypeAttributes.Class, assembly.MainModule.ImportReference(typeof(RuntimeModuleBase))); //module.DefineType("RuntimeModule", TypeAttributes.Public | TypeAttributes.Class, typeof(RuntimeModuleBase)); var ctor = new MethodDefinition(".ctor", MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, module.ImportReference(typeof(void)) ); //.method public hidebysig specialname rtspecialname instance void .ctor() cil managed //xafModule.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard | CallingConventions.HasThis, Type.EmptyTypes); var baseCtor = typeof(RuntimeModuleBase).GetConstructor(Type.EmptyTypes); var il = ctor.Body.Instructions; //.maxstack 8 //L_0000: ldarg.0 //L_0001: call instance void Admiral.ERP.Module.RuntimeModuleBase::.ctor() //L_0006: ret il.Add(Instruction.Create(OpCodes.Ldarg_0)); il.Add(Instruction.Create(OpCodes.Call, module.ImportReference(baseCtor))); il.Add(Instruction.Create(OpCodes.Ret)); xafModule.Methods.Add(ctor); module.Types.Add(xafModule); #endregion #region 创建业务对象 var ObjectSpace = this.Application.CreateObjectSpace(); var allTypes = ObjectSpace.GetObjects <BusinessObjectBase>(); var userDefinedBos = allTypes.OfType <BusinessObject>().Where(x => x.IsRuntimeDefine).ToList(); //ObjectSpace.GetObjects<BusinessObject>(new BinaryOperator("IsRuntimeDefine", true)).OrderBy(x => x.CreateIndex).ToArray(); var dllTypes = allTypes.Except(userDefinedBos); //ObjectSpace.GetObjects<BusinessObject>(new BinaryOperator("IsRuntimeDefine", false)); module.InitializeTypeReferences(dllTypes); //第一步只生成类型定义,是因为可能有交叉使用类型,如,基类是未定义的类型,则无法使用 #region 定义类型生成的代码,包含属性修饰:-->[NonPersistent]pubic class { } foreach (var bo in userDefinedBos) { var typeAtt = TypeAttributes.Class | TypeAttributes.Public; if (bo.IsAbstract) { typeAtt |= TypeAttributes.Abstract; } else if (!bo.CanInherits) { typeAtt |= TypeAttributes.Sealed; } var type = new TypeDefinition(bo.Category.FullName, bo.称, typeAtt); module.Types.Add(type); if (!bo.IsPersistent) { type.AddNonPersistentDc(); } if (bo.IsCloneable.HasValue) { type.ModelDefault("IsCloneable", bo.IsCloneable.Value.ToString().ToLower()); } if (bo.IsCreatableItem.HasValue) { type.ModelDefault("IsCreatableItem", bo.IsCreatableItem.Value.ToString().ToLower()); } if (bo.IsVisibileInReports.HasValue) { type.VisibileInReport(bo.IsVisibileInReports.Value); } type.AddToTypeReferences(bo); } #endregion #region 生成剩下的内容 foreach (var bo in userDefinedBos) { var type = bo.GetTypeDefintion(); if (type == null) { throw new Exception("错误!"); } #region 处理基类 var boBaseType = bo.Base.GetTypeReference() ?? module.ImportReference(typeof(SimpleObject)); MethodReference boBaseCtor; if (boBaseType.HasGenericParameters) { type.BaseType = boBaseType.MakeGenericType(bo.GenericParameters.Select(gp => gp.ParameterValue.GetTypeReference()).ToArray()); //var tb = boBaseType.Resolve().MakeGenericType(bo.GenericParameters.Select(gp => gp.ParameterValue.FindType(typeReferences)).ToArray()); boBaseCtor = //(tb as TypeDefinition).Methods.Single(x => x.Name == ".ctor" && x.Parameters.First().ParameterType.FullName == typeof(Session).FullName); module.ImportReference( type.BaseType.Resolve() .Methods.Single( x => x.Name == ".ctor" && x.Parameters.First().ParameterType.FullName == typeof(Session).FullName) ); boBaseCtor = boBaseCtor.MakeGeneric(bo.GenericParameters.Select(gp => gp.ParameterValue.GetTypeReference()).ToArray()); } else { type.BaseType = boBaseType; boBaseCtor = module.ImportReference( boBaseType.Resolve().Methods.Single(x => x.Name == ".ctor" && x.Parameters.Count == 1 && x.Parameters.Single().ParameterType.FullName == typeof(Session).FullName) ); } if (boBaseCtor != null) { var boctor = new MethodDefinition(".ctor", MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig | MethodAttributes.RTSpecialName, //CallingConventions.Standard | CallingConventions.HasThis, module.ImportReference(typeof(void)) ); // type.DefineConstructor(MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig | MethodAttributes.RTSpecialName, CallingConventions.Standard | CallingConventions.HasThis, new Type[] { typeof(Session) }); var p = new ParameterDefinition("session", ParameterAttributes.None, module.ImportReference(typeof(Session))); boctor.Parameters.Add(p); var boil = boctor.Body.GetILProcessor(); //.GetILGenerator(); boil.Emit(OpCodes.Ldarg_0); boil.Emit(OpCodes.Ldarg_1); boil.Emit(OpCodes.Call, boBaseCtor); boil.Emit(OpCodes.Nop); boil.Emit(OpCodes.Nop); boil.Emit(OpCodes.Ret); //L_0000: ldarg.0 //L_0001: ldarg.1 //L_0002: call instance void IMatrix.ERP.Module.BusinessObjects.订单`1 <class IMatrix.ERP.Module.BusinessObjects.PMS.采购订单明细>::.ctor(class [DevExpress.Xpo.v15.2] //DevExpress.Xpo.Session) //L_0007: nop //L_0008: nop //L_0009: ret //.method public hidebysig specialname rtspecialname //instance void .ctor(class ['DevExpress.Xpo.v15.2']DevExpress.Xpo.Session session) cil managed //{ //// 代码大小 10 (0xa) //.maxstack 8 //IL_0000: ldarg.0 //IL_0001: ldarg.1 //IL_0002: call instance void [IMatrix.ERP.Module]IMatrix.ERP.Module.BusinessObjects.'订单`1'::.ctor<class '业务'.'采购计划明细'>(class ['DevExpress.Xpo.v15.2']DevExpress.Xpo.Session) //IL_0007: nop //IL_0008: nop //IL_0009: ret //} // end of method '采购计划'::.ctor type.Methods.Add(boctor); } #endregion #region 填加属性 foreach (var p in bo.Properties) { BuildPropertyCore(p, type); } #endregion #region 填加集合属性 foreach (var item in bo.CollectionProperties) { BuildCollectionProperty(item, type); } #endregion } #endregion #endregion #region 保存生成的程序集 assembly.Write(newFileName); #endregion #region 除模块信息,让系统执行更新表结构动作 var moduleInfo = ObjectSpace.FindObject <ModuleInfo>(new BinaryOperator("Name", "RuntimeModule")); if (moduleInfo != null) { ObjectSpace.Delete(moduleInfo); ObjectSpace.CommitChanges(); } var restart = Application as IRestartApplication; if (restart != null) { restart.RestartApplication(); } #endregion }
private void GenerateModuleAssembly() { #region GetVersion Version ver = BusinessBuilder.GetVersion(AdmiralEnvironment.DomainComponentDefineFile); if (ver != null) { ver = new Version(ver.Major + 1, ver.Minor, ver.Build, ver.Revision); } else { ver = new Version(1, 0, 0, 0); } #endregion var assemblyName = "AdmiralDynamicDC"; var newFileName = assemblyName + ver + ".dll"; #region 定义程序集 var asmName = new AssemblyName(assemblyName) { Version = ver }; //[assembly: AssemblyFileVersionAttribute("1.0.0.12")] var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Save, AdmiralEnvironment.DomainComponentDefineDirectory.FullName); #region 定义模块 var module = assembly.DefineDynamicModule(assemblyName, newFileName); #endregion #endregion #region 设置文件版本 var asmFileVerCtor = typeof(AssemblyFileVersionAttribute).GetConstructor(new[] { typeof(string) }); var asmFileVer = new CustomAttributeBuilder(asmFileVerCtor, new object[] { ver.ToString() }); assembly.SetCustomAttribute(asmFileVer); #endregion #region XafModule var xafModule = module.DefineType("RuntimeModule", TypeAttributes.Public | TypeAttributes.Class, typeof(RuntimeModuleBase)); var ctor = xafModule.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard | CallingConventions.HasThis, Type.EmptyTypes); var baseCtor = typeof(RuntimeModuleBase).GetConstructor(Type.EmptyTypes); var il = ctor.GetILGenerator(); //.maxstack 8 //L_0000: ldarg.0 //L_0001: call instance void Admiral.ERP.Module.RuntimeModuleBase::.ctor() //L_0006: ret il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Call, baseCtor); il.Emit(OpCodes.Ret); xafModule.CreateType(); #endregion #region 创建业务对象 var bos = ObjectSpace.GetObjects <IBusinessObject>(new BinaryOperator("IsRuntimeDefine", true)).OrderBy(x => x.CreateIndex).ToArray(); var types = new Dictionary <IBusinessObjectBase, TypeBuilder>(); foreach (var bo in bos) { var type = module.DefineType("BusinessObject." + bo.BusinessObjectName, TypeAttributes.Interface | TypeAttributes.Public | TypeAttributes.Abstract); AddDomainAttribute(type, bo.RegisterType); if (!bo.IsPersistent) { AddNonPersistentDc(type); } if (bo.DefaultProperty != null) { AddDefaultProperty(type, bo.DefaultProperty); } if (bo.NavigationGroup != null) { AddNavigationItem(type, bo.NavigationGroup.Name); } if (!string.IsNullOrEmpty(bo.Caption)) { type.ModelDefault("Caption", bo.Caption); } if (bo.Icon != null) { type.ModelDefault("ImageName", bo.Icon.ImageName); } else { type.ModelDefault("ImageName", "BO_Unknown"); } if (bo.IsCloneable.HasValue) { type.ModelDefault("IsCloneable", bo.IsCloneable.Value.ToString().ToLower()); } if (bo.IsCreatableItem.HasValue) { type.ModelDefault("IsCreatableItem", bo.IsCreatableItem.Value.ToString().ToLower()); } if (bo.IsVisibileInReports.HasValue) { type.VisibileInReport(bo.IsVisibileInReports.Value); } types.Add(bo, type); } foreach (var bo in bos) { var type = types[bo]; #region 处理基类 foreach (var bi in bo.Bases) { type.AddInterfaceImplementation(ImportTypeReference(bi, types)); } #endregion #region 填加属性 foreach (var p in bo.Properties) { p.BuildProperty(type, types); } #endregion try { type.CreateType(); } catch (Exception ex) { throw new Exception("创建类" + type.Name + "时出错:" + ex.Message); } } #endregion #region 保存生成的程序集 assembly.Save(newFileName); File.WriteAllText(AdmiralEnvironment.DomainComponentDefineConfig.FullName, AdmiralEnvironment.DomainComponentDefineDirectory.FullName + "\\" + newFileName); #endregion #region 除模块信息 var moduleInfo = ObjectSpace.FindObject <ModuleInfo>(new BinaryOperator("Name", "ERPModule")); if (moduleInfo != null) { ObjectSpace.Delete(moduleInfo); ObjectSpace.CommitChanges(); } #endregion }
public BusinessMaker(BusinessBuilder aBuilder) { _builder = aBuilder; }
public void ProcessRequest(HttpContext context) { BusinessBuilder.Reset(); HttpRuntime.UnloadAppDomain(); //Thread.CurrentThread.Abort(); }