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

时间:2017-12-27 21:06:50

标签: c#

  

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中失败。

1 个答案:

答案 0 :(得分:0)

你正在注射

MongoRepository<TestUser> repository

或者您必须使用界面,这是DI的原则。

通过以下

替换控制器的构造函数
IRepository<TestUser> repository

它会起作用。