ジェネリックリポジトリ投げ、次のエラーのためにタイプのサービスを解決できません。 nvalidOperationException: 'Controllers.HomeController'をアクティブにしようとしているときに、タイプ 'Core.Repository.MongoDb.MongoRepository`1 [Controllers.HomeController + TestUser]'のサービスを解決できません。と、InvalidOperationException:一般的なリポジトリ
以下は、依存性注入を実行しようとしている間にエラーを投げているジェネリックリポジトリです。
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<>));
基本的には、それ自体がエラーを投げる前にホームコントローラに来ることさえありません。 DIなしでインスタンス化しようとすると、リポジトリはなぜDIで失敗するのかわかりません。
(あなたはコンストラクタで使用)実際のエンティティtestuserとは、エンティティからのみ継承し、IEntityインタフェースを実装していない間、あなたのIRepository は、IEntity 期待しています。問題ありますか? –
Jure
あなたの質問を編集して、コードが正しくフォーマットされるようにしてください。 –
@Jure EntityクラスはIEntityインターフェイスを実装しています。私はEntityから他のクラスを派生していますが、なぜDIで解決できないのか分かりません。 – dpdp