【问题标题】:InvalidOperationException: Unable to resolve service for type 'Repository.UnitOfWork'InvalidOperationException:无法解析“Repository.UnitOfWork”类型的服务
【发布时间】:2021-02-10 02:22:39
【问题描述】:

这是我在 .net core 3.1 中实现存储库 unitofwork 和通用的代码。 我编写存储库、用户存储库、工作单元、上下文等。 运行应用程序后出现错误: InvalidOperationException:无法解析“Repository.UnitOfWork”类型的服务

我不知道我应该将什么作为“DbContextOptions”传递给上下文或工作单元

这是我的控制器:

public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        UnitOfWork db;
        public HomeController(ILogger<HomeController> logger, UnitOfWork db)
        {
            _logger = logger;
            this.db = db;
        }
}

这是我的上下文:

public PandanetContext(DbContextOptions<PandanetContext> options) : base(options)
        {
        }

这是我的工作单元:

 public class UnitOfWork : IDisposable
    {
        PandanetContext db;
        public UnitOfWork(PandanetContext db)
        {
            this.db = db;
        }
        private UserRepository userRepository;
        public UserRepository UserRepository
        {
            get
            {
                if (userRepository == null)
                {
                    userRepository = new UserRepository(db);
                }
                return userRepository;
            }
        }
}

这是我的存储库:

public class UserRepository : Repository<UserDomainModel>
    {
        PandanetContext db;
        public UserRepository(PandanetContext context) : base(context)
        {
            db = context;
        }
    }

这是动作结果:

  public IActionResult Index()
        {            
            UserDomainModel user = new UserDomainModel();
            user.Name = "تست";
            db.UserRepository.create(user);
            db.UserRepository.Save();
            return View();
        }

在startup.cs中:

services.AddDbContext<PandanetContext>(options => 
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

【问题讨论】:

  • 是的,startup.cs 中有@Stefan
  • 在 startup.cs 中:services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
  • 嗯......这很有趣......你能发布完整的错误吗?
  • 啊,对不起,我弄错了。您需要注册工作单元。

标签: c# .net-core entity-framework-core


【解决方案1】:

您需要注册UnitOfWork:

在您的 startup.cs 中,您可以将 UnitOfWork 添加到服务提供者:

public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<UnitOfWork>();
 
    //... etc.
}

【讨论】:

  • 非常感谢。有用。我是 .net 核心的新手,我正在将我的 mvc 项目更改为 .net 核心。它对我帮助很大。
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 2023-01-30
相关资源
最近更新 更多