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

时间:2014-11-17 14:11:29

标签: c# .net repository simple-injector

您好我想自动对我的依赖项进行一点点注册。

我现在拥有的是:

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来为我返回例如FolderRepository,如果是T:Folder。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用RegisterManyForOpenGeneric注册所有通用实例:

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

和开放类型:

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

请参阅文档here