Entity Frameworkのリポジトリ ソリューションを実装しようとしていますが、Unity を使用してジェネリックを含む型を登録するのに問題があります。
与えられた:
// IRepository interface
public interface IRepository<TEntity>
{
// omitted for brevity
}
// Repository implementation
public class Repository<TEntity, TContext> : IRepository<TEntity>, IDisposable
where TEntity : class
where TContext : DbContext
{
// omitted for brevity
}
// service layer constructor
public MyServiceConstructor(IRepository<Account> repository)
{
_repository = repository;
}
IRepository から Repository へのタイプ マッピングを登録する必要があります。しかし、この種のマッピングの Unity 構文に問題があります。
私は運がないので次のことを試しました:
container.RegisterType<IRepository<>, typeof(Repository<,>)>();
container.RegisterType<typeof(IRepository<>), Repository<,>>();
編集
@Steven の応答に基づいて、現在次の実装があります。
// UnityRepository implementation
public class UnityRepository<TEntity> : Repository<TEntity, MyDbContextEntities>
where TEntity : class
{
public UnityRepository() : base(new MyDbContextEntities()) { }
}
// Unity bootstrapper
container.RegisterType(typeof(IRepository<>), typeof(UnityRepository<>));