net6.0 配置autofac6.3.0配置EFCore
环境:
VS2022
SqlServer 2019
Autofac 6.3.0
EFCore 6.0.3
dotnet 6.0
创建项目
创建了项目的时候才发现有些坑,比如没有Startup.cs,环境有些不一样
AutoFac是什么?
autofac是一种IOC容器,它能帮你控制类的创建,让你不再创建实例也能使用类的函数和变量,它也能提供依赖注入,只需要注入已经控制的类,便可以使用类的方法和变量。
安装Autofac
打开项目在nuget包管理器里面搜索autofac安装
配置AutoFac
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
//一定要写这句,替换 .NET的默认容器
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
//配置服务
ConfigureServices(builder.Services);
//将当前项目的封装名作为扫描的条件,autofac自动扫描注册
builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
Assembly[] assemblies = new Assembly[] { Assembly.Load("net6webapp") };
builder.RegisterAssemblyTypes(assemblies);
});
至此autofac配置就差不多可以用了,有一些更详细的配置推荐 戳我去看官方文档
EFCore安装
从nuget安装
EntityFrameWorkCore
EntityFrameWorkCore.SqlServer
EntityFrameWorkCore.Tools
EFCore 配置
创建AppDbContext
public class AppDbContext : DbContext
{
//因为使用了service注入,所以在创建类的时候需要一个带参数的构造函数
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{ }
public DbSet<Temperature> Temperatures { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//modelBuilder.Entity<Person>().HasIndex(u => u.Name).IsUnique(); //是否唯一,看你直接是否需要咯
}
}
配置Program.cs,一些 global using 真的蛋疼
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
//一定要写这句,替换 .NET的默认容器
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
//配置服务
ConfigureServices(builder.Services);
//将当前项目的封装名作为扫描的条件,autofac自动扫描注册
builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
Assembly[] assemblies = new Assembly[] { Assembly.Load("net6webapp") };
builder.RegisterAssemblyTypes(assemblies);
});
var app = builder.Build();
...
app.Run();
void ConfigureServices(IServiceCollection services){
//使用service的方式注入EF
services.AddDbContext<AppDbContext>(options => {
options.UseSqlServer(builder.Configuration.GetConnectionString("default"));
});
}
appsetting.json中配置链接字符串
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"urls": "http://*:80",
"ConnectionStrings": {
"default": "server=192.168.1.41;database=DbDefault;uid=sa;pwd=123456;"
}
}
然后就愉快的使用吧!创建helloworldController
public class HelloWorldController : Controller
{
private readonly TemperatureService _temperatureService;
public HelloWorldController(TemperatureService temperatureService)
{
_temperatureService = temperatureService;
}
public string Index()
{
return "This is my default action..."+ _temperatureService.GetTemp();
}
}
TemperatureService.cs
public class TemperatureService
{
private readonly AppDbContext _appDbContext;
public TemperatureService(AppDbContext appDbContext)
{
_appDbContext = appDbContext;
}
public string GetTemp()
{
return "{humidity: \"0.0 % \",temp: \"0.0'C\"}";
}
public async Task Insert(string temperature,string humidity)
{
_appDbContext.Temperatures.Add(new Domain.Temperature()
{
Time = DateTime.Now,
Temp = temperature,
Humidity = humidity
});
await _appDbContext.SaveChangesAsync();
}
}
结束语:
相信一些朋友已经发现了吧,我这是准备跑在微型电脑上的程序,用来获取温度并保存数据库的。已经实现了,所以会有一些心得体会所以给大家分享一下。
net6.0在设备上跑起来还是蛮快的,比springboot要快一点点而已;可以在本地发布后再部署到linux上,不然linux上发布太慢了。