简体   繁体   English

简单的注入器注册动态类型

[英]Simple Injector registering dynamic types

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. 有没有办法很好地注册IRepository为我返回例如文件夹FolderRepository如果T:文件夹。

Thanks 谢谢

You can register all generic instances using RegisterManyForOpenGeneric : 您可以使用RegisterManyForOpenGeneric注册所有通用实例:

container.RegisterManyForOpenGeneric(typeof(IRepository<>),
    typeof(IRepository<>).Assembly);

and for open types: 对于开放类型:

container.RegisterOpenGeneric(typeof(IRepository<>), typeof(RepositoryBase<>));

See documentation here 请参阅此处的文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM