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







All Articles