Simple Injector registering dynamic types

516 Views Asked by At

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

1

There are 1 best solutions below

1
On BEST ANSWER

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