net6.0 配置autofac6.3.0配置EFCore


環境:

VS2022
SqlServer 2019
Autofac 6.3.0
EFCore 6.0.3
dotnet 6.0

創建項目

創建了項目的時候才發現有些坑,比如沒有Startup.cs,環境有些不一樣
image

AutoFac是什么?

autofac是一種IOC容器,它能幫你控制類的創建,讓你不再創建實例也能使用類的函數和變量,它也能提供依賴注入,只需要注入已經控制的類,便可以使用類的方法和變量。

安裝Autofac

打開項目在nuget包管理器里面搜索autofac安裝
image
image

配置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

image

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM