我试图在服务构造函数中设置一个公共属性,它在Any()方法中给出了null引用异常。如果我将它改为只读字段,它工作正常。但是我想通过实例化服务来设置这个属性,任何人都可以提供有关如何实现这一点的见解。
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
}
}
答案 0 :(得分:1)
我已在this earlier question中部分回答了此问题。
SelectCommand属性为null的原因是因为它是公共属性。尝试通过已注册的依赖项解析所有服务公共属性,并且因为您没有任何类型为ServiceCommand
的已注册依赖项,所以它将被覆盖为null。如果这是在你的构造函数中定义的,那么它会抛出一个运行时异常,因为它只是一个属性,它的设置为null 。
如果您将SelectCommand的可见性更改为非公开,例如保护,私人,内部或静态不会被国际奥委会注入。