Używając Unity, jak zarejestrować mapowania typów dla typów generycznych?
Próbuję zaimplementowaćrozwiązanie repozytorium dla Entity Framework ale mam problem z zarejestrowaniem typów, które zawierają generics używające Unity.
Dany:
// 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;
}
Muszę zarejestrować mapowanie typu dla IRepository do Repository. ale mam problem ze składnią Unity dla tego rodzaju mapowania.
Bez powodzenia wypróbowałem następujące rzeczy:
container.RegisterType<IRepository<>, typeof(Repository<,>)>();
container.RegisterType<typeof(IRepository<>), Repository<,>>();
EDYTOWAĆ
Na podstawie odpowiedzi @Steven mam teraz następującą implementację:
// 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<>));