基于业务基础项目创建

基于业务基础项目创建

一. 使用VS2019创建项目

1.1 选择ASP.NET CORE Web应用程序,如图1.1.1

在这里插入图片描述
图1.1.1

1.2 项目尽量以CloudHill.Project.YourProjectName.Web空间命名,如图1.2.1

在这里插入图片描述 图1.2.1

1.3 选择空项目完成基础创建,如图1.3.1                    

在这里插入图片描述
图1.3.1

二.使用CodeSmith生成基础文件

2.1 CodeSmith模板地址:/svn/Framework/CodeSmithTemplate/trunk/EFCore3.1
2.2 使用数据里连接业务表,CodeSmith数据库连接串示例如下,如图2.2.1
Data Source=数据库IP;Initial Catalog=数据库表名;User ID=数据库账号;Password=数据库密码

在这里插入图片描述
图 2.2.1

2.3 命名空间尽量使用:CloudHill.Project.YourProjectName,如图2.3.1

在这里插入图片描述
图 2.3.1

2.4 执行生成结果,如图2.4.1

在这里插入图片描述
图 2.4.1

三.将Entity层引入项目

3.1 创建Entity类库项目
3.2 命名空间尽量使用:CloudHill.Project.YourProjectName.Entity
3.3 将Codesmith生成的Entity内容粘贴进CloudHill.Project.YourProjectName.Entity
[如图3.1.1-3.1.2]

在这里插入图片描述
图 3.1.1

在这里插入图片描述
图 3.1.2

四.将Dao层引入项目

4.1 创建Dao类库项目
4.2 命名空间尽量使用:CloudHill.Project.YourProjectName.Dao
4.3 将Codesmith生成的Dao内容粘贴进CloudHill.Project.YourProjectName.Dao
4.4 将CloudHill.Project.YourProjectName.Entity添加进CloudHill.Project.YourProjectName.Dao的引用
4.5 安装Nuget包,如代码块4.1.2
4.6 核查4.1.3代码块
[如图4.1.1-4.1.4]
Install-Package CloudHill.NetCore.Utils -Project CloudHill.Project.YourProjectName.Dao
Install-Package Microsoft.EntityFrameworkCore -Project CloudHill.Project.YourProjectName.Dao -Version 3.1.3
//如果需要使用MSSQL则使用下方代码
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Project CloudHill.Project.YourProjectName.Dao -Version 3.1.3
//如果需要使用MYSQL则使用下方代码
Install-Package Pomelo.EntityFrameworkCore.MySql -Project CloudHill.Project.YourProjectName.Dao -Version  3.1.2

代码块 4.1.2

在这里插入图片描述
图 4.1.1

在这里插入图片描述

图 4.1.2

        public YourProjectNameEntities()
        {
            //记住该字符串配置
            m_ProviderName = "YourProjectNameEntities";
        }

        public YourProjectNameEntities(string providerName)
        {
            m_ProviderName = providerName;
        }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
           var dbType = AppsettingsHelper.GetInfo("DB:Type");

            dbType = dbType == null ? string.Empty : dbType;

            var conn = AppsettingsHelper.GetInfo("ConnectionStrings:" + m_ProviderName);

            switch (dbType.ToLower())
            {
               case "mssql": optionsBuilder.UseSqlServer(conn); break;
               //不使用mysql注释即可
               //case "mysql": optionsBuilder.UseMySql(conn); break;
               default: optionsBuilder.UseSqlServer(conn); break;
            }
        }

代码块 4.1.3

五.将Service层引入项目

5.1 创建Service类库项目
5.2 命名空间尽量使用:CloudHill.Project.YourProjectName.Service
5.3 将Codesmith生成的Service内容粘贴进CloudHill.Project.YourProjectName.Service
5.4 将CloudHill.Project.YourProjectName.Dao添加进CloudHill.Project.YourProjectName.Service的引用
5.5 安装Nuget包,如代码块5.1.2
[如图5.1.1-5.1.2]

在这里插入图片描述
图 5.1.1

 Install-Package CloudHill.NetCore.Utils -Project CloudHill.Project.YourProjectName.Service

代码块5.1.2

六.将Web层引入项目

6.1 将Codesmith生成的YourProjectNameWeb内容粘贴进CloudHill.Project.YourProjectName.Web
6.2 将CloudHill.Project.YourProjectName.Service添加进CloudHill.Project.YourProjectName.Web的引用
6.3 安装Nuget包,如代码块6.1.1
6.4 将6.1.2代码块替换Program.cs对应内容
6.5 将6.1.3代码块替换Startup.cs对应内容
 [如图6.1.1-6.1.4]
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson -Project CloudHill.Project.YourProjectName.Web -Version 3.1.3
Install-Package CloudHill.NetCore.Utils -Project CloudHill.Project.YourProjectName.Web

代码块6.1.1

 public class Program
 {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
       Host.CreateDefaultBuilder(args)
           .ConfigureWebHostDefaults(webBuilder =>
           {
               webBuilder.UseStartup<Startup>();
           })
           //为了使用AspectCore aop
           .UseServiceProviderFactory(new DynamicProxyServiceProviderFactory());
  }

代码块6.1.2

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            //注册Colletcion
            IocProxyFactory.SetServiceCollection(services);
            //注册为了使用UserHttpContext
            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            //注册用户信息上下文
            IocProxyFactory.SetService<IUserDataContext, UserDataContext>();
            //注册所有IOC对应关系
            services.BuildIOC();
            //注册AOP
            services.ConfigureDynamicProxy();
            //启动每个项目的初始化程序
            services.InitWebSite();
            //注册为了使用MVC的View
            services.AddControllersWithViews();
            //注册全局监控异常
            services.AddMvc(option =>
            {
                option.Filters.Add(typeof(GlobalExceptionFilter));
                option.EnableEndpointRouting = false;
            });
            //解决JSON返回值大小写问题,以把编码格式问题
            services.AddMvc().AddNewtonsoftJson(options =>
            {
               // 忽略循环引用
               options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
               // 不使用驼峰
               options.SerializerSettings.ContractResolver = new DefaultContractResolver();
            });
            //设置前台Memberbase的认证cookies,使用了MemberBaseController需要使用下方代码
            services.AddAuthentication().AddCookie("Member");
            //设置后台base的认证cookies,使用了BaseController需要使用下方代码
            services.AddAuthentication().AddCookie("Base");
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            //使用了Cookies权限认证
            app.UseAuthentication();
            // 注册为了使用UserHttpContext
            app.UseInjectionServiceProvider(app.ApplicationServices.GetService<IServiceProvider>());
            //使用静态文件
            app.UseStaticFiles();
            //注册但不限于Cms,Sys,Evaluation,Weixin的路由
            app.RegisterRouter();
            //使用默认路由
            app.UseMvcWithDefaultRoute();
            //注册areas下的自定义路由
            app.UseMvc(routes =>
            {
                routes.MapAreaRoute(
                name: "areas",
                //需要根据实际文件夹名称自定义
                areaName: "yourProjectName",
                template: "yourProjectName/{controller}/{action}/{id?}"
            );
            });
            //注册Provider,一定在所有Service注册完成后调用
            IocProxyFactory.InitServiceProvider();
            
            //若使用Paas功能,获取Nuget包:CloudHill.PaaS.Identity4.NetCore,并初始化SDK
            CloudHillPaasHandler.Instance.Run("AppID","AppSecret");
        }
    }

代码块6.1.3

在这里插入图片描述
图 6.1.4

七.配置appsettings.json

7.1 将7.1.1代码块替换appsettings.json对应内容
 {
  "AllowedHosts": "*",
  "ConnectionStrings": {
    //代码块4.1.3中得Entities
    "YourProjectNameEntities": "Server=数据库IP;Database=数据库名称;User id=数据库账号;password=数据库密码",
  },
  "Log4net": { "FilePath": "app.config" },
  //mssql:使用mssql mssql:使用mysql 注意取消代码块4.1.3对应数据库选项
  "DB": { "Type": "mssql" }
}

7.1.1代码块

八.配置app.config

8.1 新建app.config
8.2 将8.1.1代码块替换app.config对应内容
[如图8.1.1-8.1.2]
<?xml version="1.0" encoding="utf-8"?>
<configuration>

<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<section name="CloudHill.Framework.CommonPlatformConfig" type="CloudHill.NetCore.Utils.Config.CMSConfigurationSectionHandler, CloudHill.NetCore.Utils" />
</configSections>

   <CloudHill.Framework.CommonPlatformConfig>
   <SiteConfig>
   <GlobalInit>
    <Assemblys>
        <Assembly name="NetCore.Utils" value="CloudHill.NetCore.Utils" />
    </Assemblys>
    </GlobalInit>

    <Unity>
      <Assemblys>
        <!--注意需要配置对应项目都得Service和Dao进行IOC映射-->
        <Assembly name="CloudHill.Project.YourProjectName.Service" value="CloudHill.Project.YourProjectName.Service" />
        <Assembly name="CloudHill.Project.YourProjectName.Dao" value="CloudHill.Project.YourProjectName.Dao" />
      </Assemblys>

    </Unity>
 </SiteConfig>

 </CloudHill.Framework.CommonPlatformConfig>

 <log4net>

  <logger name="Com" additivity="false">

   <level value="INFO" />

   <appender-ref ref="ComLogFileAppender" />

  </logger>

  <logger name="Debug" additivity="false">

   <level value="DEBUG" />

   <appender-ref ref="DebugLogFileAppender" />

  </logger>

  <logger name="Logic" additivity="false">

   <level value="INFO" />

   <appender-ref ref="LogicLogFileAppender" />

  </logger>

  <appender name="ComLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">

   <param name="File" type="" value="Log/Com/" />

   <param name="AppendToFile" value="true" />

   <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />

   <param name="RollingStyle" value="Date" />

   <param name="DatePattern" value="yyyyMMdd" />

   <param name="StaticLogFileName" value="false" />

   <layout type="log4net.Layout.PatternLayout,log4net">

    <param name="Header" value="" />

    <param name="Footer" value="" />

    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />

   </layout>
</appender>

  <appender name="DebugLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">

   <param name="File" type="" value="Log/Debug/" />

   <param name="AppendToFile" value="true" />

   <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />

   <param name="RollingStyle" value="Date" />

   <param name="DatePattern" value="yyyyMMdd" />

   <param name="StaticLogFileName" value="false" />

   <layout type="log4net.Layout.PatternLayout,log4net">

    <param name="Header" value="" />

    <param name="Footer" value="" />

    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />

   </layout>

  </appender>

  <appender name="LogicLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">

   <param name="File" type="" value="Log/Logic/" />

   <param name="AppendToFile" value="true" />

   <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />

   <param name="RollingStyle" value="Date" />

   <param name="DatePattern" value="yyyyMMdd" />

   <param name="StaticLogFileName" value="false" />

   <layout type="log4net.Layout.PatternLayout,log4net">

    <param name="Header" value="" />

    <param name="Footer" value="" />

    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />

   </layout>

  </appender>

 </log4net>

 <appSettings></appSettings>

</configuration>

代码块 8.1.1

在这里插入图片描述

图 8.1.2

九.创建单元测试项目

9.1 创建UnitTest类库项目
9.2 命名空间尽量使用:CloudHill.Project.YourProjectName.UnitTest
9.3 将CloudHill.Project.YourProjectName.Service添加进CloudHill.Project.YourProjectName.UnitTest的引用
9.4 将CloudHill.Project.YourProjectName.Dao添加进CloudHill.Project.YourProjectName.UnitTest的引用
9.5 安装Nuget包,如代码块9.1.1
9.6 将8.1和7.1得app.config和appsettings.json复制一份进单元测试,并将app.config更名为testhost.dll.config
9.7 将testhost.dll.config和appsettings.json设置成"如果较新则复制",如图9.1.4
9.8 简易单元测试例子如代码块9.1.5
[如图9.1.1-9.1.5]
Install-Package CloudHill.NetCore.Utils -Project CloudHill.Project.YourProjectName.UnitTest

代码块 9.1.1

在这里插入图片描述
图 9.1.2
在这里插入图片描述
图 9.1.3
在这里插入图片描述
图 9.1.4

    [TestClass]
    public class UnitTest1
    {
        public UnitTest1()
        {
            IServiceCollection serviceDescriptors = new ServiceCollection();

            IocProxyFactory.SetServiceCollection(serviceDescriptors);

            serviceDescriptors.BuildIOC();

            //注册用户信息上下文
            IocProxyFactory.SetService<IUserDataContext, UserDataContext>();

            IocProxyFactory.InitServiceProvider();
        }

        [TestMethod]
        public void TestMethod1()
        {
            UserDataContextHelper.SetUserID(1);

            var service = IocProxyFactory.GetService<ILogService>();

            var rawData = @"{Command:'', 
                                Data:{
                                     }
                              }";

            var jObject = JObject.Parse(rawData);

            var data = (JObject)jObject["Data"];

            //调用方法
            var ret = service.GetList(data);

            Console.ReadKey();
        }
    }

代码块 9.1.5

至此基础项目准备完毕,如果需要需要继续集成PAAS壳体功能

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值