Hi I want to automate little bit registration of my dependencies.
What i have now is:
public interface IRepository<T> where T : class
public interface IFolderRepository : IRepository<Folder>
public class RepositoryBase<T> : IRepository<T>, IDisposable where T : class
public class FolderRepository : RepositoryBase<Folder>, IFolderRepository
I have registered this dependency:
container.Register<IFolderRepository, FolderRepository>();
All work fine but in one place i need to make this process generic. Like:
var repository = container.GetInstance<IRepository<TModel>>();
and I had to register:
container.Register<IRepository<Folder>, RepositoryBase<Folder>>();
Is there any way to nicely register IRepository to return for me for example FolderRepository if T : Folder.
Thanks
You can register all generic instances using RegisterManyForOpenGeneric
:
container.RegisterManyForOpenGeneric(typeof(IRepository<>),
typeof(IRepository<>).Assembly);
and for open types:
container.RegisterOpenGeneric(typeof(IRepository<>), typeof(RepositoryBase<>));
See documentation here