/// <summary> /// 从证件单元集合里获取用户数据 /// </summary> /// <typeparam name="IdT">ID类型</typeparam> /// <typeparam name="UserT">用户类型</typeparam> /// <param name="claims">证件单元集合</param> /// <param name="authUserData">身份授权用户数据</param> /// <returns>用户</returns> public static UserT GetUserDataFromClaims <IdT, UserT>(IEnumerable <Claim> claims, IAuthUserData <IdT, UserT> authUserData) where UserT : BasicUserInfo <IdT> { if (authUserData == null) { throw new NullReferenceException("身份用户数据(authUserData)不能为null"); } var user = authUserData.CreateUser(); var identity = AutofacTool.Resolve <IIdentity <IdT> >(); user.Id = identity.ConvertTo(claims.Get(ClaimTypes.NameIdentifier)); user.Name = claims.Get(ClaimTypes.Name); user.Code = claims.Get("code"); user.LoginId = claims.Get("loginId"); user.TenantId = identity.ConvertTo(claims.Get("tenantId")); var loginTimeStr = claims.Get("loginTime"); if (!string.IsNullOrWhiteSpace(loginTimeStr)) { DateTime loginTime; if (DateTime.TryParse(loginTimeStr, out loginTime)) { user.LoginTime = loginTime; } } authUserData.SetExtraToUserData(user, claims); return(user); }
/// <summary> /// 注册组件 /// </summary> public static void RegisterComponents() { AssemblyConfigLocalMember assemblyConfigLocalMember = new AssemblyConfigLocalMember(); assemblyConfigLocalMember.ProtoAssemblyConfigReader = new AssemblyConfigXml(); AssemblyConfigInfo assemblyConfig = assemblyConfigLocalMember.Reader(); //实例化一个autofac的创建容器 var builder = new ContainerBuilder(); IContainer container = builder.UnifiedRegisterAssemblysForWebApi2(GlobalConfiguration.Configuration, new WebBuilderParam() { AssemblyControllers = assemblyConfig.Entrances, AssemblyServices = assemblyConfig.Services, RegisteringServiceAction = () => { builder.RegisterType <IdentityHttpFormAuth>().As <IIdentityAuthVali>().AsSelf().PropertiesAutowired(); builder.RegisterType <IdentityHttpFormAuth>().As <IIdentityExit>().AsSelf().PropertiesAutowired(); builder.RegisterType <IdentityHttpFormAuth>().AsSelf().PropertiesAutowired(); } }); AttachmentService attachmentService = AutofacTool.Resolve <AttachmentService>(); AttachmentOwnerLocalMember attachmentOwnerLocalMember = AutofacTool.Resolve <AttachmentOwnerLocalMember>(); attachmentOwnerLocalMember.ProtoAttachmentOwnerReader = AutofacTool.Resolve <AttachmentOwnerXml>(); attachmentService.AttachmentOwnerReader = attachmentOwnerLocalMember; }
/// <summary> /// 点击测试连接 /// </summary> /// <param name="sender">引发对象</param> /// <param name="e">事件参数</param> private void btnTestConn_Click(object sender, EventArgs e) { try { var connStr = GetDbConnectionString(); if (string.IsNullOrWhiteSpace(connStr)) { return; } var factory = AutofacTool.Resolve <ISimpleFactory <string, IDbConnection> >(); var dbConnection = factory.Create(cbxDataSourceType.SelectedItem.ToString()); dbConnection.ConnectionString = connStr; dbConnection.Open(); if (dbConnection.State == ConnectionState.Open) { dbConnection.Close(); dbConnection.Dispose(); MessageBox.Show("连接成功"); } else { MessageBox.Show("连接失败"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// 点击加载 /// </summary> /// <param name="sender">引发对象</param> /// <param name="e">事件参数</param> private void btnLoad_Click(object sender, EventArgs e) { try { var connStr = GetDbConnectionString(); if (string.IsNullOrWhiteSpace(connStr)) { return; } var dbInfoService = AutofacTool.Resolve <IDbInfoService>(); var returnInfo = dbInfoService.Query(txtDb.Text, connStr, cbxDataSourceType.SelectedItem.ToString()); if (returnInfo.Success()) { dgvTable.Tag = cbxDataSourceType.SelectedItem.ToString(); dgvTable.DataSource = returnInfo.Data; } else { MessageBox.Show(returnInfo.Msg); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// 点击测试连接 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnTestConn_Click(object sender, EventArgs e) { ISimpleFactory <string, IDbConnection> factory = AutofacTool.Resolve <ISimpleFactory <string, IDbConnection> >(); IDbConnection dbConnection = factory.Create(cbxDataSourceType.SelectedItem.ToString()); try { dbConnection.ConnectionString = GetDbConnectionString(); dbConnection.Open(); if (dbConnection.State == ConnectionState.Open) { dbConnection.Close(); dbConnection.Dispose(); MessageBox.Show("连接成功"); } else { MessageBox.Show("连接失败"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// 初始化 /// </summary> public static void Init() { if (PlatformCodeTool.Config["Page:MaxPageSize"] != null) { UtilTool.MaxPageSize = Convert.ToInt32(PlatformCodeTool.Config["Page:MaxPageSize"]); } IHttpContextAccessor httpContext = AutofacTool.Resolve <IHttpContextAccessor>(); LanguageUtil.GetCurrentCultureName = () => { return(httpContext != null?httpContext.HttpContext.Session.GetString("cultureName") : null); }; UtilTool.GetCurrEnvironmentTypeFunc = () => { if (httpContext != null) { int?type = httpContext.HttpContext.Session.GetInt32("CurrEnvironmentType"); if (type == null) { return(EnvironmentType.PRODUCTION); } return((EnvironmentType)type); } return(EnvironmentType.TEST); }; }
/// <summary> /// 根据用户ID移除前事件 /// </summary> /// <param name="arg1">返回信息</param> /// <param name="arg2">用户ID</param> /// <param name="arg3">连接ID</param> /// <param name="arg4">当前用户</param> private static void UserService_RemoveByIdsing(ReturnInfo <bool> arg1, int[] arg2, string arg3, BasicUserInfo <int> arg4) { IWorkflowHandleService workflowHandleService = AutofacTool.Resolve <IWorkflowHandleService>(); ReturnInfo <bool[]> handleReturnInfo = workflowHandleService.ExistsAuditAndUnhandleByHandleIds(arg2, arg3, arg4); if (handleReturnInfo.Failure()) { arg1.FromBasic(handleReturnInfo); return; } if (handleReturnInfo.Data.IsNullOrLength0()) { return; } for (var i = 0; i < handleReturnInfo.Data.Length; i++) { if (handleReturnInfo.Data[i]) { arg1.SetFailureMsg($"第{i + 1}行:用户尚有未处理的审核流程,故不能移除"); return; } } }
static void Main(string[] args) { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json"); PlatformCodeTool.Config = builder.Build(); DependencyInjection.RegisterComponents(); //var server = SingleConnectionTool.Connection.CreateRpcServer("RpcServiceQueue"); //server.Receive(inData => //{ // var msg = Encoding.UTF8.GetString(inData); // var re = Encoding.UTF8.GetBytes("这是一个回复"); // return re; //}); IRpcServerListen listen = AutofacTool.Resolve <IRpcServerListen>(); listen.ListenAsync(); System.Console.WriteLine("start MessageQueue RPC Server Service..."); System.Console.ReadLine(); }
/// <summary> /// 初始化用户处理验证 /// 注册用户删除前判断是否有处理的事件 /// </summary> public static void InitValiUserHandleVali() { IUserService userService = AutofacTool.Resolve <IUserService>(); userService.RemoveByIding += UserService_RemoveByIding; userService.RemoveByIdsing += UserService_RemoveByIdsing; }
/// <summary> /// 注册组件 /// </summary> public static void RegisterComponents() { AssemblyConfigLocalMember assemblyConfigLocalMember = new AssemblyConfigLocalMember(); assemblyConfigLocalMember.ProtoAssemblyConfigReader = new AssemblyConfigJson(); AssemblyConfigInfo assemblyConfig = assemblyConfigLocalMember.Reader(); var builder = new ContainerBuilder(); builder.UnifiedRegisterAssemblys(new BuilderParam() { AssemblyServices = assemblyConfig.Services, RegisteringServiceAction = () => { builder.RegisterType <AutofacInstance>().As <IInstance>().AsSelf().PropertiesAutowired().SingleInstance(); builder.RegisterType <MessagePackBytesSerialization>().As <IBytesSerialization>().AsSelf().PropertiesAutowired().SingleInstance(); builder.RegisterType <MessagePackConvertTypeValue>().As <IConvertTypeValue>().AsSelf().PropertiesAutowired().SingleInstance(); } }); PlatformTool.AppConfig = AutofacTool.Resolve <IAppConfiguration>(); var implCache = AutofacTool.Resolve <InterfaceMapImplCache>(); implCache.Set(new DictionaryJson($"{AppContext.BaseDirectory}/Config/interfaceAssemblyMapImplAssemblyConfig.json")); }
static void Main(string[] args) { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json"); PlatformCodeTool.Config = builder.Build(); DependencyInjection.RegisterComponents(); var proxy = AutofacTool.Resolve <IBusinessDispatchProxy>(); var conTypeValue = AutofacTool.Resolve <IConvertTypeValue>(); var stuService = proxy.Create <IStudentService>(); var a0 = stuService.TestTask5Async(); a0.Wait(); var data = conTypeValue.To(a0.Result, typeof(IList <StudentInfo>)) as IList <StudentInfo>; var a1 = stuService.TestTask1Async(); a1.Wait(); //var a3 = stuService.TestTask3Async(); //a3.Wait(); //var a2 = stuService.TestTask2Async(); //var a4 = stuService.TestTask4Async(); //Task.WhenAll(a1, a2, a3, a4); var r1 = stuService.Get(10); var r2 = stuService.Query(); var r3 = stuService.Get2(11); var r4 = stuService.Query2(); var reInfo = stuService.Add(new StudentInfo() { Id = 1, Name = "黄振东" }); var reInfo2 = stuService.Adds(new List <StudentInfo>() { new StudentInfo() { Id = 1, Name = "黄振东" }, new StudentInfo() { Id = 2, Name = "黄振东2" } }); System.Console.WriteLine("start MessageQueue RPC Client..."); System.Console.ReadLine(); }
/// <summary> /// 拦截 /// </summary> /// <param name="basicReturn">基本返回</param> /// <param name="invocation">拦截参数</param> /// <param name="attr">特性</param> /// <param name="isExecProceeded">是否已执行</param> protected override void Intercept(BasicReturnInfo basicReturn, IInvocation invocation, FunctionAttribute attr, out bool isExecProceeded) { isExecProceeded = false; var ignorePerAttr = invocation.Method.GetAttribute <IgnorePermissionAttribute>(); if (ignorePerAttr != null) { return; } if (attr.Codes.IsNullOrCount0()) { basicReturn.SetFailureMsg("功能编码不能为空"); return; } MenuAttribute menuAttr = invocation.TargetType.GetAttribute <MenuAttribute>(); if (menuAttr == null) { return; } if (string.IsNullOrWhiteSpace(menuAttr.Code)) { basicReturn.SetFailureMsg("菜单编码不能为空"); return; } // 这里执行权限验证 IUserService userService = AutofacTool.Resolve <IUserService>(); if (userService == null) { basicReturn.SetFailureMsg("找不到用户服务"); return; } ReturnInfo <bool> perReInfo = userService.IsCurrUserPermission(menuAttr.Code, attr.Codes); if (perReInfo.Failure()) { basicReturn.FromBasic(perReInfo); return; } if (perReInfo.Data) { return; } else { basicReturn.SetCodeMsg(ErrCodeDefine.NOT_PERMISSION, "Sorry,您没有访问此功能权限"); } }
/// <summary> /// 点击加载按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnLoad_Click(object sender, EventArgs e) { IDbInfoService dbInfoService = AutofacTool.Resolve <IDbInfoService>(); ReturnInfo <IList <TableInfo> > returnInfo = dbInfoService.Query(txtDataBase.Text, GetDbConnectionString(), cbxDataSourceType.SelectedItem.ToString()); if (returnInfo.Success()) { dgvTable.Tag = cbxDataSourceType.SelectedItem.ToString(); dgvTable.DataSource = returnInfo.Data; } else { MessageBox.Show(returnInfo.Msg); } }
static void Main(string[] args) { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json"); PlatformCodeTool.Config = builder.Build(); DependencyInjection.RegisterComponents(); IRpcServerListen listen = AutofacTool.Resolve <IRpcServerListen>(); listen.ListenAsync(); System.Console.WriteLine("start MessageQueue RPC Server Service..."); System.Console.ReadLine(); }
/// <summary> /// 根据用户ID移除前事件 /// </summary> /// <param name="arg1">返回信息</param> /// <param name="arg2">用户ID</param> /// <param name="arg3">连接ID</param> /// <param name="arg4">当前用户</param> private static void UserService_RemoveByIding(ReturnInfo <bool> arg1, int arg2, string arg3, BasicUserInfo <int> arg4) { IWorkflowHandleService workflowHandleService = AutofacTool.Resolve <IWorkflowHandleService>(); ReturnInfo <bool> handleReturnInfo = workflowHandleService.ExistsAuditAndUnhandleByHandleId(arg2, arg3, arg4); if (handleReturnInfo.Failure()) { arg1.FromBasic(handleReturnInfo); return; } if (handleReturnInfo.Data) { arg1.SetFailureMsg("用户尚有未处理的审核流程,故不能移除"); } }
/// <summary> /// 注册组件 /// </summary> /// <param name="services">服务</param> /// <returns>服务提供者</returns> public static IServiceProvider RegisterComponents(IServiceCollection services) { AssemblyConfigLocalMember assemblyConfigLocalMember = new AssemblyConfigLocalMember(); assemblyConfigLocalMember.ProtoAssemblyConfigReader = new AssemblyConfigJson(); AssemblyConfigInfo assemblyConfig = assemblyConfigLocalMember.Reader(); //实例化一个autofac的创建容器 var builder = new ContainerBuilder(); IServiceProvider serviceProvider; builder.UnifiedRegisterAssemblys(services, new BuilderParam() { AssemblyServices = assemblyConfig.Services, RegisteringServiceAction = () => { builder.RegisterType <HttpContextAccessor>().As <IHttpContextAccessor>().AsSelf().PropertiesAutowired(); builder.RegisterType <IdentityCookieAuth>().As <IIdentityAuthVali>().AsSelf().PropertiesAutowired(); builder.RegisterType <IdentityCookieAuth>().As <IIdentityExit>().AsSelf().PropertiesAutowired(); builder.RegisterType <WorkflowConfigCache>().As <IWorkflowConfigReader>().AsSelf().PropertiesAutowired(); builder.RegisterType <WorkflowInitSequenceService>().As <IWorkflowFormService>().AsSelf().PropertiesAutowired(); //builder.RegisterInstance() builder.RegisterType <LanguageLibraryCache>().As <ILanguageLibrary>().AsSelf().PropertiesAutowired(); builder.RegisterType <LanguageLibraryConfigJson>().As <IReaderAll <LanguageInfo> >().AsSelf().PropertiesAutowired(); } }, out serviceProvider); AttachmentService attachmentService = AutofacTool.Resolve <AttachmentService>(); AttachmentOwnerLocalMember attachmentOwnerLocalMember = AutofacTool.Resolve <AttachmentOwnerLocalMember>(); attachmentOwnerLocalMember.ProtoAttachmentOwnerReader = AutofacTool.Resolve <AttachmentOwnerJson>(); attachmentService.AttachmentOwnerReader = attachmentOwnerLocalMember; var languageCache = AutofacTool.Resolve <LanguageLibraryCache>(); // var languageJson = AutofacTool.Resolve<LanguageLibraryJson>(); //languageJson.JsonFile = @"F:\MyWorks\net\Hzdtf.FoundationFramework\WebDemoCore\Hzdtf.WebDemo.Core\Config\LanguageLibrary\test.min.json"; /// languageCache.ProtoLanguageLibraryReader = languageJson; LanguageUtil.LanguageLibrary = languageCache; return(serviceProvider); }
/// <summary> /// 绑定数据源类型 /// </summary> private void BindDataSourceType() { IReader <IDictionary <string, string> > reader = AutofacTool.Resolve <IReader <IDictionary <string, string> > >(); dataSourceTypes = reader.Reader(); if (dataSourceTypes.IsNullOrCount0()) { return; } foreach (KeyValuePair <string, string> item in dataSourceTypes) { cbxDataSourceType.Items.Add(item.Key); } cbxDataSourceType.SelectedIndex = 0; }
/// <summary> /// 点击生成按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnGenerator_Click(object sender, EventArgs e) { IList <TableInfo> tables = new List <TableInfo>(); foreach (DataGridViewRow row in dgvTable.Rows) { DataGridViewCheckBoxCell checkCell = row.Cells[2] as DataGridViewCheckBoxCell; if (checkCell.Value != null && Convert.ToBoolean(checkCell.Value)) { tables.Add(row.DataBoundItem as TableInfo); } } if (tables.Count == 0) { MessageBox.Show("请勾选要生成的表"); return; } FunctionType[] functionTypes = GetFunctionTypes(); if (functionTypes.Length == 0) { MessageBox.Show("请勾选要生成的功能项"); return; } if (string.IsNullOrWhiteSpace(txtNamespacePfx.Text)) { MessageBox.Show("命名空间前辍不能为空"); return; } Cursor.Current = Cursors.WaitCursor; ICodeGeneratorService generatorService = AutofacTool.Resolve <ICodeGeneratorService>(); ReturnInfo <bool> returnInfo = generatorService.Generator(tables, functionTypes, txtNamespacePfx.Text, dgvTable.Tag.ToString()); Cursor.Current = Cursors.Default; if (returnInfo.Success()) { MessageBox.Show("生成成功"); } else { MessageBox.Show(returnInfo.Msg); } }
/// <summary> /// 初始化 /// </summary> public static void Init() { UserTool.GetCurrUserFunc = () => { ReturnInfo <BasicUserInfo> returnInfo = AutofacTool.Resolve <IdentityHttpFormAuth>().Reader(); if (returnInfo.Success() && returnInfo.Data != null) { return(returnInfo.Data); } if (ConfigurationManager.AppSettings["User:AllowTest"] != null && Convert.ToBoolean(ConfigurationManager.AppSettings["User:AllowTest"])) { return(UserTool.TestUser); } return(null); }; }
/// <summary> /// 初始化 /// </summary> public static void Init() { UserTool.GetCurrUserFunc = () => { ReturnInfo <BasicUserInfo> returnInfo = AutofacTool.Resolve <IdentityCookieAuth>().Reader(); if (returnInfo.Success() && returnInfo.Data != null) { return(returnInfo.Data); } if (PlatformCodeTool.Config["User:AllowTest"] != null && Convert.ToBoolean(PlatformCodeTool.Config["User:AllowTest"])) { return(UserTool.TestUser); } return(null); }; UserWorkflowUtil.InitValiUserHandleVali(); }
/// <summary> /// 注册组件 /// </summary> public static void RegisterComponents() { AssemblyConfigLocalMember assemblyConfigLocalMember = new AssemblyConfigLocalMember(); assemblyConfigLocalMember.ProtoAssemblyConfigReader = new AssemblyConfigJson(); AssemblyConfigInfo assemblyConfig = assemblyConfigLocalMember.Reader(); var builder = new ContainerBuilder(); builder.UnifiedRegisterAssemblys(new BuilderParam() { AssemblyServices = assemblyConfig.Services, RegisteringServiceAction = () => { builder.RegisterType <MessagePackBytesSerialization>().As <IBytesSerialization>().AsSelf().PropertiesAutowired().SingleInstance(); builder.RegisterType <MessagePackConvertTypeValue>().As <IConvertTypeValue>().AsSelf().PropertiesAutowired().SingleInstance(); } }); PlatformTool.AppConfig = AutofacTool.Resolve <IAppConfiguration>(); }
/// <summary> /// 点击生成按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnGenerator_Click(object sender, EventArgs e) { var param = new CodeGeneratorParamInfo(); try { param.Tables = new List <TableInfo>(); foreach (DataGridViewRow row in dgvTable.Rows) { DataGridViewCheckBoxCell checkCell = row.Cells[2] as DataGridViewCheckBoxCell; if (checkCell.Value != null && Convert.ToBoolean(checkCell.Value)) { param.Tables.Add(row.DataBoundItem as TableInfo); } } if (param.Tables.Count == 0) { MessageBox.Show("请勾选要生成的表"); return; } param.FunctionTypes = GetFunctionTypes(); if (param.FunctionTypes.Length == 0) { MessageBox.Show("请勾选要生成的功能项"); return; } if (string.IsNullOrWhiteSpace(txtNamespacePfx.Text)) { MessageBox.Show("命名空间前辍不能为空"); return; } param.NamespacePfx = txtNamespacePfx.Text; switch (cbxPKType.SelectedItem.ToString()) { case "字符串": param.PkType = PrimaryKeyType.STRING; break; case "Guid": param.PkType = PrimaryKeyType.GUID; break; case "雪花算法": param.PkType = PrimaryKeyType.SNOWFLAKE; break; } param.Type = dgvTable.Tag.ToString(); param.IsTenant = cbxIsTenant.Checked; Cursor.Current = Cursors.WaitCursor; ICodeGeneratorService generatorService = AutofacTool.Resolve <ICodeGeneratorService>(); ReturnInfo <bool> returnInfo = generatorService.Generator(param); Cursor.Current = Cursors.Default; if (returnInfo.Success()) { MessageBox.Show("生成成功"); } else { MessageBox.Show(returnInfo.Msg); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// 拦截 /// </summary> /// <param name="basicReturn">基本返回</param> /// <param name="invocation">拦截参数</param> /// <param name="attr">特性</param> /// <param name="isExecProceeded">是否已执行</param> protected override void Intercept(BasicReturnInfo basicReturn, IInvocation invocation, TransactionAttribute attr, out bool isExecProceeded) { isExecProceeded = true; BasicReturnInfo returnInfo = new BasicReturnInfo(); object connId = null; if (attr.ConnectionIdIndex == -1) { connId = invocation.GetArgumentValue(attr.ConnectionIdIndex); } IGetObject <IPersistenceConnection> getPerConn = AutofacTool.Resolve(invocation.TargetType) as IGetObject <IPersistenceConnection>; if (getPerConn == null) { basicReturn.SetFailureMsg("未实现IGetObject<IPersistenceConnection>接口"); return; } IPersistenceConnection perConn = getPerConn.Get(); string connectionId = null; // 当有连接ID传过来,判断是否存在该连接事务,存在则不开启新事务 if (connId != null) { string connIdStr = connId.ToString(); if (perConn.GetDbTransaction(connIdStr) != null) { invocation.Proceed(); return; } connectionId = connIdStr; } else { connectionId = perConn.NewConnectionId(); } IDbTransaction dbTransaction = null; try { dbTransaction = perConn.BeginTransaction(connectionId, attr); invocation.SetArgumentValue(attr.ConnectionIdIndex, connectionId); invocation.Proceed(); // 如果返回值为失败标识,也回滚 Type returnType = invocation.Method.ReturnType; if (invocation.Method.ReturnType.IsReturnType()) { BasicReturnInfo basicReturnInfo = invocation.ReturnValue as BasicReturnInfo; if (basicReturnInfo.Failure()) { dbTransaction.Rollback(); return; } } dbTransaction.Commit(); } catch (Exception ex) { if (dbTransaction != null) { dbTransaction.Rollback(); } throw new Exception(ex.Message, ex); } finally { perConn.Release(connectionId); } }