gpt4 book ai didi

c# - Ninject 和通用

转载 作者:行者123 更新时间:2023-11-30 17:13:01 25 4
gpt4 key购买 nike

我正在尝试使用 Ninject 重用 NopCommerce 代码进行数据访问。我的问题:如何将未指定的泛型类型注入(inject)对象?我知道 NopCommerce 使用 Autofac。

我的对象描述:我有 Controller ( MyController ),它包含存储库 ( IRepository<T> )。此存储库被注入(inject)为 EfRepository<T>使用 ninject 命令:kernel.Bind(typeof(IRepository<>)).To(typeof(EfRepository<>)) .EfRepository持有类型 IDbContext ,这是通用的 DbContext . EfRepository不会将其通用类型传递给 IDbContext ,但它仍然被注入(inject)它。它是如何使用 Ninject 完成的?

代码;

public class MyController : Controller
{
//a repository --> injected as EfRepository<> using generic injection using the command:
//kernel.Bind(typeof(IRepository<>)).To(typeof(EfRepository<>));
private readonly IRepository<Account> _repository;
}

public class EfRepository<T> : IRepository<T> where T : BaseEntity
{
private IDbContext _context; //<<== How do I inject <T> to IDbcontext?
}

public interface IDbContext
{
IDbSet<T> Set<T>() where T : BaseEntity;
}

最佳答案

因为 IDbContext 不是通用的,所以您可以简单地将它注入(inject)存储库,并在您使用它时将 T 传递给通用的 Set 方法。

public class EfRepository<T> : IRepository<T> where T : BaseEntity
{
private IDbContext context;
public EfRepository(IDbContext dbContext)
{
this.context = context;
}

public void Do()
{
var dbSet = this.context.Set<T>();
}
}

关于c# - Ninject 和通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10134081/

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