【问题标题】:Property Does Not Get Injected Via Autofac属性不会通过 Autofac 注入
【发布时间】:2016-06-23 08:59:25
【问题描述】:

我在另一个程序集中有一个 IDbContext 接口,在另一个程序集中有一个服务堆栈,基础服务类有一个 IDbContext 属性,其他服务确实使用它的属性。

为了使事情变得简单,我省略了基本服务类,即使在这个场景中它也不起作用。 这是 IDbContext :

public interface IDbContext
{   
}

然后我有一个实现 IDbContext 的 DBContext 类。 在另一个程序集中,我们有这个具有 IDContext 属性的类:

public class StudyFieldService : IStudyFieldService{
    private readonly IDbSet<StudyField> _studyFields;
    public IDbContext DbContext { get; set; }
    public StudyFieldService(IDbContext db)
    {
        _studyFields = DbContext.Set<StudyField>();
    }
}

然后我有 Autofac 注册表类,它将类映射到接口,并且注册表类也在另一个程序集中 这是映射类型的方法的主体:

 var builder = new ContainerBuilder();
        builder.RegisterType<SalaryDbContext>().As<IDbContext>().InstancePerLifetimeScope();
        builder.RegisterType<StudyFieldService>().As<IStudyFieldService>().PropertiesAutowired();

现在,如果我将 IDbContext 放入构造函数参数 Autofac 会解决它,但我希望它作为属性自动注入。

【问题讨论】:

  • 你有异常吗?还是财产的价值null
  • 属性值为空
  • 我刚刚测试了它,它工作正常。您是否错过了提供的东西?

标签: c# entity-framework dependency-injection inversion-of-control autofac


【解决方案1】:

我认为您应该删除构造函数注入并将 DbContext 变量名称更改为其他名称或使用 this.DbContext 使其工作。

public class StudyFieldService : IStudyFieldService{
    private readonly IDbSet<StudyField> _studyFields;
    public IDbContext Context{ get; set; }
    public StudyFieldService()
    {
        _studyFields = Context.Set<StudyField>();
    }
}

我猜变量名和 ef DbContext 有冲突

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-01
    • 2017-01-26
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多