Ich habe Probleme beim Registrieren einer Abhängigkeit mit der integrierten Dependency-Injection-Bibliothek von Microsoft. Ich habe keine Ahnung, wohin ich von hier gehen soll, und ich fühle mich überall. Nach dem Start der Web-Anwendung ich die folgenden Fehlermeldung erhalten:Hilfe bei der Registrierung von Abhängigkeiten erforderlich
InvalidOperationException: Unable to resolve service for type 'System.Data.Entity.DbContext' while attempting to activate 'Services.Repositories.Repository`1[Domain.Person]'.
Unten ist meine Kontextklasse:
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());
}
Weiter ist meine Repository-Klasse:
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);
}
}
Meine Dienste Klasse:
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;
}
}
Meine Con Troller Klasse:
public class HomeController : Controller
{
private readonly IPersonService _personService;
public HomeController(IPersonService personService)
{
_personService = personService;
}
public IActionResult Index()
{
return View();
}
}
Und das ist, wo ich alles registriert haben bisher:
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));
}
Was ich scheinen zu fehlen? Das hat mir stundenlang Kopfschmerzen bereitet.
Fantastischen Auge zu erwarten! Solch eine einfache Lösung. Vielen Dank Mats391, deine Antwort hat mein Problem behoben. – Sylvoo