简单注入器注册动态类型
本文关键字:类型 动态 注册 注入器 简单 | 更新日期: 2023-09-27 18:30:50
嗨,我想自动注册我的依赖项。
我现在拥有的是:
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
我已经注册了这个依赖项:
container.Register<IFolderRepository, FolderRepository>();
一切正常,但在一个地方我需要使这个过程通用。喜欢:
var repository = container.GetInstance<IRepository<TModel>>();
我必须注册:
container.Register<IRepository<Folder>, RepositoryBase<Folder>>();
有没有办法很好地注册 IRepository 为我返回,例如文件夹存储库,如果 T : 文件夹。
谢谢
您可以使用
RegisterManyForOpenGeneric
注册所有泛型实例:
container.RegisterManyForOpenGeneric(typeof(IRepository<>),
typeof(IRepository<>).Assembly);
对于开放类型:
container.RegisterOpenGeneric(typeof(IRepository<>), typeof(RepositoryBase<>));
请参阅此处的文档