2017-02-01 8 views
0

Microsoftの組み込みDependency Injectionライブラリに依存関係を登録する際に問題があります。私はここからどこへ行くべきか分かりません。そして、私はその場所のすべてを感じます。私は次のエラーを取得するWebアプリケーションを開始すると:依存関係を登録する手助けが必要

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 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()); 
    } 

次は私のリポジトリクラスである:以下

InvalidOperationException: Unable to resolve service for type 'System.Data.Entity.DbContext' while attempting to activate 'Services.Repositories.Repository`1[Domain.Person]'.

は私のContextクラスであります
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)); 
    } 

私が欠けているように見える何をすべきか?これは私に何時間も頭痛を与えてきました。

答えて

0

MyContextを追加するだけですが、DbContextには関連付けません。

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

またはその代わりDbContext

+0

ファンタスティック目のコンストラクタでMyContextを期待するリポジトリを変更するような何かを試してみてください!そのような単純な修正。そんなにMats391ありがとう、あなたの答えは私の問題を修正しました。 – Sylvoo

関連する問題