您好我想自动对我的依赖项进行一点点注册。
我现在拥有的是:
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。
由于
答案 0 :(得分:1)
您可以使用RegisterManyForOpenGeneric
注册所有通用实例:
container.RegisterManyForOpenGeneric(typeof(IRepository<>),
typeof(IRepository<>).Assembly);
和开放类型:
container.RegisterOpenGeneric(typeof(IRepository<>), typeof(RepositoryBase<>));
请参阅文档here