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中失败。
答案 0 :(得分:0)
你正在注射
MongoRepository<TestUser> repository
或者您必须使用界面,这是DI的原则。
通过以下
替换控制器的构造函数IRepository<TestUser> repository
它会起作用。