繁体   English   中英

InvalidOperationException:无法解析通用存储库类型的服务

[英]InvalidOperationException: Unable to resolve service for type for generic repository

通用存储库抛出以下错误。 nvalidOperationException:尝试激活“Controllers.HomeController”时,无法解析“Core.Repository.MongoDb.MongoRepository`1[Controllers.HomeController+TestUser]”类型的服务。

以下是在尝试执行依赖项注入时抛出错误的通用存储库。

      public interface IEntity
        {

            string Id { get; set; }

            DateTime CreatedDate { get; set; }

        }

   public interface IRepository<T> where T: IEntity
    {
        /// <summary>
        /// Inserts the specified entity.
        /// </summary>
        /// <param name="entity">The entity.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        Task<T> Insert(T entity, InsertOneOptions options, CancellationToken cancellationToken = default(CancellationToken));
}

 public class MongoRepository<T> : IRepository<T> where T : IEntity
 {
          ....
  }


public class Entity: IEntity
{
    public string Id { get; set; }

    public DateTime CreatedDate { get; set; }
    ....
}


public class HomeController : Controller
{
    private IRepository<TestUser> _repository;

    public class TestUser : Entity
    {
        public string Name { get; set; }
    }
    public HomeController(MongoRepository<TestUser> repository)
    {
              this._repository = repository;

    }

    public IActionResult Index()
    {
        var result=_repository.GetAll();

        return View(result);
    }
}

Startup.cs 类注册服务是这样的。

 services.AddScoped(typeof(IRepository<>), typeof(MongoRepository<>));

基本上,它甚至不会在自己抛出错误之前进入 Home 控制器。 当我尝试在没有 DI 的情况下实例化时,存储库无法确定为什么它在 DI 中失败。

你正在注射

MongoRepository<TestUser> repository

或者你必须使用接口,这是DI的原理。

将控制器的构造函数替换为以下内容

IRepository<TestUser> repository

它会起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM