Simple injector registering dynamic types
Hi I want to automate a little registration of my dependencies.
What I have now:
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 registered this dependency:
container.Register<IFolderRepository, FolderRepository>();
Everything works fine, but in one place I need to make this process generic. How:
var repository = container.GetInstance<IRepository<TModel>>();
and I had to register:
container.Register<IRepository<Folder>, RepositoryBase<Folder>>();
Is there a good way to register IRepository to return for me like FolderRepository if T: Folder.
thank
+3
source to share
1 answer
You can register all shared instances with RegisterManyForOpenGeneric
:
container.RegisterManyForOpenGeneric(typeof(IRepository<>),
typeof(IRepository<>).Assembly);
and for public types:
container.RegisterOpenGeneric(typeof(IRepository<>), typeof(RepositoryBase<>));
See the documentation here
+1
source to share