環境:
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上發布太慢了。