目錄
创建.NET Core MVC项目
1. 创建.NET Core Web 项目
在新建项目中选择 Visual C#
下 .NET Core 中的 ASP.NET Core Web 应用程序。
修改名称、位置及解决方案名称。
2. 注册MVC组件
打开Starup.cs
文件,在 ConfigureServices 下注册MVC服务
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
在 Configure 中添加路由
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc((RouteBuilder) =>
{
RouteBuilder.MapRoute("default", "{Controller}/{Action}/{Parameter}",
new { @Controller = "Home", @Action = "Index", @Parameter = String.Empty });
});
}
Startup 类 :参考文档
IServiceCollection :参考文档
IApplicationBuilder:参考文档
3. 创建MVC页面
创建 Controllers、Models、Views 三个文件夹
在Views中添加 _Layout.cshtml
、_ViewStart.cshtml
两个文件。
_Layout.cshtml :布局页 添加@RendBody()
_ViewStart.cshtml:点击添加视图=》引用布局页_layout.cshtml
_layout.cshtml
是在呈现view时运行的,可以理解为,在加载view之前先运行这个。
添加MVC空控制器 创建视图、浏览测试。
创建完视图页后添加控制器 重新生成项目。
4. 注册依赖注入
使用依赖注入 主要涉及 4个文件 appsettings.json
、ConfigSetting.cs
、AppSettings.cs
、AutoSetting.cs
appsettings.json
: .net Core 默认配置文件,取代了 .net 中config文件
{
"ConnectionStrings": {
"DefaultConnection": ""
},
"AppSettings": {
"AssemblyStrings": [
"MyProject.Service", //业务逻辑层引用名称
"MyProject.Repository" //数据访问层引用名称
]
}
}
AppSettings.cs
:配置文件映射类
public class AppSettings
{
public string ConnectionStrings { get; set; }
public string[] AssemblyStrings { get; set; }
}
ConfigSetting.cs
:读取映射文件帮助类 来源于 Royal丶鬼才 , 官方文档
public class ConfigSetting
{
protected static readonly IConfiguration Configuration;
static ConfigSetting()
{
Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true)
.Build();
}
/// <summary>
/// 获取实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T GetSection<T>(string key) where T : class, new()
{
var obj = new ServiceCollection()
.AddOptions()
.Configure<T>(Configuration.GetSection(key))
.BuildServiceProvider()
.GetService<IOptions<T>>()
.Value;
return obj;
}
/// <summary>
/// 获取单项
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetSection(string key)
{
return Configuration.GetValue<string>(key);
}
}
AutoSetting.cs
:实现依赖注入 官方文档
public static class AutoSetting
{
public static void RegisterServices(this IServiceCollection services)
{
var _assemblys = ConfigSetting.GetSection<AppSettings>("AppSettings").AssemblyStrings;
foreach (var _item in _assemblys)
{
var _list = Assembly.Load(_item);
foreach (var _type in _list.GetTypes())
{
foreach (var _interfaces in _type.GetInterfaces())
{
services.AddTransient(_interfaces, _type);
}
}
}
}
}
创建文件后 需要在 starup.cs
中 使用依赖注入方法
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.RegisterServices();
}
搭建三层架构
1. 三层目录简介
Model/Entity
:实体层 负责映射数据库中表字段(Model层是不属于三层架构中层级)
传统三层结构:DAL/Repository,BLL/Service,UI
DAL/Repository
:数据访问层 负责执行数据库相关操作 (添加,修改,删除,查询)(引用:Model)
BLL/Service
:业务逻辑层 负责承上启下作用 ,对具体问题进行逻辑判断与执行操作 (引用:DAL,Model)
UI/Web
:表示层 用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面(引用:BLL,Model)
根据项目大小 可以选择扩展相关接口层
三层架构扩展相关接口层: IDAL/IRepository,IBLL/IService 接口层
相关引用
DAL/Repository
引用 Model
,IDAL/IRepository
BLL/Service
引用 Model
,IBLL/IService
,DAL/Repository
,IDAL/IRepository
UI/Web
引用 Model
,IBLL/IService
,BLL/Service
2. 添加类库
在解决方案右键选择 添加=》新建项目=》类库(.NET standard)
EF Core
1. 添加EF Core
打开工具=》管理NuGet =>管理解决方案的NuGet工具包
点击浏览:搜索 EF Core 将 Microsoft.EntityFrameworkCore.SqlServer
,Microsoft.EntityFrameworkCore.Tools
添加到项目。
在添加EF Core 时需要注意相关版本信息需要与当前UI层版本一直 否则会报版本冲突
VS 2017 中默认使用.net Core 版本为 2.1.0
2. 创建SqlContext文件
在实体层添加类 :SqlContext.cs
并添加引用 using Microsoft.EntityFrameworkCore
; 并输入相关信息
public class SqlContext : DbContext
{
public SqlContext()
{
}
public SqlContext(DbContextOptions<SqlContext> options)
: base(options)
{
}
//示例调用
public DbSet<tb_User> tb_User { get; set; }
}
2. 建立与数据库连接
在EF Core中建立连接数据库方法 可以在 DbContext
中查看,接下来在建立的SqlContext
中重写连接数据库方法 OnConfiguring
关于 DbContextOptionsBuilder
参数点此 文档查看
public class SqlContext : DbContext
{
public SqlContext()
{
}
public SqlContext(DbContextOptions<SqlContext> options)
: base(options)
{
}
public DbSet<tb_User> tb_User { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("数据库连接字符串");
}
}
}