需要帮助注册依赖项



我在向Microsoft内置的依赖项注入库注册依赖项时遇到问题。我不知道从这里去哪里,我感觉到处都是。在启动web应用程序时,我得到以下错误:

InvalidOperationException:无法解析类型的服务"System.Data.Entity.DbContext",同时尝试激活'服务.存储库.存储库`1[Domain.Perse]'.

下面是我的上下文类:

public class MyContext : DbContext
{
public MyContext(string connString) : base(connString) { }
public DbSet<Person> People { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Configurations.Add(new PersonMap());
}

接下来是我的知识库类:

public class Repository<T> : IRepository<T> where T : class, IEntity
{
protected DbSet<T> DbSet;
public Repository(DbContext dataContext)
{
DbSet = dataContext.Set<T>();
}
public void Insert(T entity)
{
DbSet.Add(entity);
}
public void Delete(T entity)
{
DbSet.Remove(entity);
}
public IQueryable<T> GetAll()
{
return DbSet;
}
public T GetById(int id)
{
return DbSet.Find(id);
}
public IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate)
{
return DbSet.Where(predicate);
}
}

我的服务类别:

public class PersonService : IPersonService
{
private readonly IRepository<Person> _repo;
public PersonService(IRepository<Person> repo)
{
_repo = repo;
}
public IQueryable<Person> AsQueryable()
{
// TODO: Fix Queryable functionality
return _repo.GetAll();
}
public Person CreatePerson(string firstName, string lastName, DateTime dob)
{
var person = new Person
{
FirstName = firstName,
LastName = lastName,
DOB = dob
};
return person;
}
public void DeletePerson(int id)
{
var person = _repo.GetById(id);
_repo.Delete(person);
}
public Person UpdatePerson(int id, string firstname, string lastName, DateTime dob)
{
var person = _repo.GetById(id);
person.FirstName = firstname;
person.LastName = lastName;
person.DOB = dob;
return person;
}
}

我的控制器类:

public class HomeController : Controller
{
private readonly IPersonService _personService;
public HomeController(IPersonService personService)
{
_personService = personService;
}
public IActionResult Index()
{
return View();
}
}

到目前为止,我已经在这里注册了所有内容:

public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddScoped<MyContext>(_ => new MyContext(Configuration.GetConnectionString("connString")));
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
services.AddScoped(typeof(IPersonService), typeof(PersonService));
}

我好像少了什么?这让我头疼了好几个小时。

您只添加了MyContext,但没有将其与DbContext关联。试试之类的东西

services.AddScoped<DbContext>( _ => new MyContext(Configuration.GetConnectionString("connString")));

或者将您的存储库更改为在构造函数中使用MyContext而不是DbContext

最新更新