Hi,
I would like to know if it is possible for dependency injection to work in the ApplicationService, if one would implement generics within the custom repository?
Something like this...
Custom repository interface:
public interface ICustomRepository<TEntity> : IRepository<TEntity, int>, ITransientDependency
where TEntity : class, IEntity<int>
{
List<TEntity> GetRepositoryList();
}
Custom repository:
public class CustomRepository<TEntity> : ApplicationRepositoryBase<TEntity>, ICustomRepository<TEntity>
where TEntity : class, IEntity<int>
{
public CustomRepository(IDbContextProvider<ApplicationDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
public List<TEntity> GetRepositoryList()
{
}
}
}
Custom application service:
public class CustomAppService : CaerusAppServiceBase, ICustomAppService
{
private readonly ICustomRepository<CustomEntity> _customEntityRepository;
public CustomAppService (ICustomRepository<CustomEntity> customEntityRepository)
{
_customEntityRepository = customEntityRepository;
}
}
4 Answer(s)
-
0
You can register it like that:
IocManager.Register(typeof(ICustomRepository<>), typeof(CustomRepository<>), DependencyLifeStyle.Transient); IocManager.Register(typeof(ICustomRepository<,>), typeof(CustomRepository<,>), DependencyLifeStyle.Transient);
in your Module's Initialize method.
-
0
Thank you very much.
So does this then mean that the repository interface and implementation of it must reside within the Core assembly?
Currently I have the interface in the Core assembly and the implementation of it in the EntityFramework assembly. I am running into the problem of not being able to reference the custom repository in the core module class because of that.
What is the correct way to implement this?
-
0
Hi,
Your interface should be in .Core project. Your implementation should be in .EntityFramework project. And finally, your IocManager registration code should be in your .EntityFramework project's module class's Initialize method.
Have a nice day.
-
0
Thank you Halil :)
Have a great day!