1

我试图在服务构造函数中设置一个公共属性,它在 Any() 方法中给出了空引用异常。如果我将其更改为只读字段,它工作正常。但是我想通过实例化服务来设置这个属性,任何人都可以提供如何实现这一点的见解。

public class CustomerService : Service
{
   private readonly IDbConnection _dbConnection;
  public ServiceCommand SelectCommand {get;set;}
  public CustomerService(IDBConnection dbConnection)
  {
         SelectCommand = new ServiceCommand();
         _dbConnection = dbConnection;            
  }

  public Customer Any()
  {
          //selectcommand is null here
  }
}
4

1 回答 1

1

我在前面的问题中已经部分回答了这个问题

所有公共财产都由国际奥委会注入

SelectCommand 属性为 null 的原因是它是一个公共属性。您的所有服务公共属性都试图由您的注册依赖项解析,并且因为您没有任何类型的注册依赖项,ServiceCommand所以它被 null 覆盖。如果这是在你的构造函数中定义的,它会抛出一个运行时异常,因为它只是一个属性,它被设置为 null

如果您将 SelectCommand 的可见性更改为非公开的,例如受保护的、私有的、内部的或静态的,则 IOC 不会尝试将其注入。

于 2013-04-01T17:49:14.210 回答