gpt4 book ai didi

c# - 注册动态类型的简单注入(inject)器

转载 作者:行者123 更新时间:2023-11-30 17:45:57 28 4
gpt4 key购买 nike

你好,我想自动注册我的依赖项。

我现在拥有的是:

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 if T : Folder。

谢谢

最佳答案

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

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

对于开放类型:

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

参见文档 here

关于c# - 注册动态类型的简单注入(inject)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974570/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com