Onu*_*ker 2 c# .net-core asp.net-core .net-6.0
我想知道如何在.NET 6 中注册unitofwork 服务。
在以前版本的.NET Core 中,可以在startup.cs 文件中注册unitofwork 服务,如下所示。
services.AddTransient<IUnitOfWork, UnitOfWork>();
Run Code Online (Sandbox Code Playgroud)
在.NET 6中,startup.cs和program.cs文件被合并。
是否可以在program.cs中注册服务?如果可以的话,怎么办?
Md *_*ron 12
\n\n让我们从您的问题开始
\n
"Is it possible to register the service in program.cs?"
\n\n是的,绝对可以
\nservice在 中注册program.cs。
"If possible, then how?"
\n\n这是
\nProgram.cs为您提供的示例asp.net 6:
var builder = WebApplication.CreateBuilder(args);\n\n// Add services to the container.\n\nbuilder.Services.AddScoped<IUnitOfWork, UnitOfWork>();\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n
Note:它\xe2\x80\x99s 几乎与我们在startup.cs 文件中使用的\n
\nasp.net core 3.2类似。asp.net 5同样的事情需要在asp.net 6 program.cs文件中做,只是方式有点不同。
如果您需要完整的示例,asp.net 6您可以查看以下详细答案:
Model:
我会使用User模型来构建UnitOfWork示例dotnet 6
public class User\n {\n public Guid Id { get; set; }\n public string FirstName { get; set; }\n public string LastName { get; set; }\n public string Email { get; set; }\n }\nRun Code Online (Sandbox Code Playgroud)\nApplicationDbContext:
public class ApplicationDbContext: DbContext\n {\n public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)\n : base(options)\n {\n }\n public DbSet<User> User { get; set; }\n protected override void OnModelCreating(ModelBuilder modelBuilder)\n {\n // base.OnModelCreating(modelBuilder);\n modelBuilder.Entity<User>().ToTable("User");\n }\n \n }\nRun Code Online (Sandbox Code Playgroud)\n\n\n笔记:
\n您应该
\nSQL Table在数据库上进行类似操作,为了使操作更容易,我\n还提供了数据库脚本。
SQL Script:
CREATE TABLE [User]\n(\n Id UNIQUEIDENTIFIER PRIMARY KEY default NEWID(),\n [FirstName] [varchar](50) NULL,\n [LastName] [varchar](50) NULL,\n [Email] [varchar](50) NULL,\n \n)\nINSERT INTO [User] ([FirstName], [LastName], [Email])\nVALUES ( \'FirstTestName\', \'FirstLastName\', \'testemail.@outlook.com\');\nRun Code Online (Sandbox Code Playgroud)\nIGenericRepository:
public interface IGenericRepository<T> where T : class\n {\n Task<IEnumerable<T>> All();\n Task<T> GetById(Guid id);\n Task<bool> Add(T entity);\n Task<bool> Delete(Guid id);\n Task<bool> Upsert(T entity);\n Task<IEnumerable<T>> Find(Expression<Func<T, bool>> predicate);\n }\nRun Code Online (Sandbox Code Playgroud)\nGenericRepository:
public class GenericRepository<T> : IGenericRepository<T> where T : class\n {\n protected ApplicationDbContext context;\n internal DbSet<T> dbSet;\n public readonly ILogger _logger;\n\n public GenericRepository(\n ApplicationDbContext context,\n ILogger logger)\n {\n this.context = context;\n this.dbSet = context.Set<T>();\n _logger = logger;\n }\n\n public virtual async Task<T> GetById(Guid id)\n {\n return await dbSet.FindAsync(id);\n }\n\n public virtual async Task<bool> Add(T entity)\n {\n await dbSet.AddAsync(entity);\n return true;\n }\n\n public virtual Task<bool> Delete(Guid id)\n {\n throw new NotImplementedException();\n }\n\n public virtual Task<IEnumerable<T>> All()\n {\n throw new NotImplementedException();\n }\n\n public async Task<IEnumerable<T>> Find(Expression<Func<T, bool>> predicate)\n {\n return await dbSet.Where(predicate).ToListAsync();\n }\n\n public virtual Task<bool> Upsert(T entity)\n {\n throw new NotImplementedException();\n }\n }\nRun Code Online (Sandbox Code Playgroud)\nIUnitOfWork:
public interface IUnitOfWork\n {\n IUserRepository Users { get; }\n\n Task CompleteAsync();\n }\nRun Code Online (Sandbox Code Playgroud)\nUnitOfWork:
public class UnitOfWork : IUnitOfWork, IDisposable\n {\n private readonly ApplicationDbContext _context;\n private readonly ILogger _logger;\n\n public IUserRepository Users { get; private set; }\n\n public UnitOfWork(ApplicationDbContext context, ILoggerFactory loggerFactory)\n {\n _context = context;\n _logger = loggerFactory.CreateLogger("logs");\n\n Users = new UserRepository(context, _logger);\n }\n \n public async Task CompleteAsync()\n {\n await _context.SaveChangesAsync();\n }\n\n public void Dispose()\n {\n _context.Dispose();\n }\n }\nRun Code Online (Sandbox Code Playgroud)\nUserRepository:
public class UserRepository : GenericRepository<User>, IUserRepository\n {\n public UserRepository(ApplicationDbContext context, ILogger logger) : base(context, logger) { }\n\n public override async Task<IEnumerable<User>> All()\n {\n try\n {\n return await dbSet.ToListAsync();\n }\n catch (Exception ex)\n {\n _logger.LogError(ex, "{Repo} All function error", typeof(UserRepository));\n return new List<User>();\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\nUnitOfWorkUsersController:
[ApiController]\npublic class UnitOfWorkUsersController : ControllerBase\n{\n private readonly ILogger<UnitOfWorkUsersController> _logger;\n private readonly IUnitOfWork _unitOfWork;\n\n public UnitOfWorkUsersController(\n ILogger<UnitOfWorkUsersController> logger,\n IUnitOfWork unitOfWork)\n {\n _logger = logger;\n _unitOfWork = unitOfWork;\n }\n\n [HttpGet]\n public async Task<IActionResult> Get()\n {\n var users = await _unitOfWork.Users.All();\n return Ok(users);\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\nProgram.cs:
public class User\n {\n public Guid Id { get; set; }\n public string FirstName { get; set; }\n public string LastName { get; set; }\n public string Email { get; set; }\n }\nRun Code Online (Sandbox Code Playgroud)\nOutput:
希望上述步骤能够相应地指导您。如果您还需要more details you can have a look our official document
| 归档时间: |
|
| 查看次数: |
9999 次 |
| 最近记录: |