试图理解继承链
Trying to understand the inheritance chain
下面是父子 class。
public class ParentController : ApiController
{
public ICustomer customer { get; set;}
public ICustUtil util { get; set;}
}
public class ChildController : ParentController
{
//no issue here
public string Get()
{
customer = util.GetCustomers();
}
}
如果我将父 class 属性设为受保护并尝试使用它们,我会得到 Object NULL reference Exception
public class ParentController : ApiController
{
protected ICustomer customer { get; set;}
protected ICustUtil util { get; set;}
}
public class ChildController : ParentController
{
//Object Null reference exception at run time here
public string Get(){
customer = util.GetCustomers();}
}
我想了解将 public
更新为 protected
访问说明符有何不同。
请注意:-
- I am using
Castle Windsor DI
container
请暂时忽略命名规则。
我猜您正在通过像 AutoFac 这样的 IoC 容器实例化这些 classes 的实例,并且您正在使用 setter 注入。否则我看不出第一个例子是如何工作的,因为你从来没有初始化 util
.
当成员受到保护时,IoC 容器无法对其进行初始化。只有 public 成员可以通过 class 本身之外的代码访问。
下面是父子 class。
public class ParentController : ApiController
{
public ICustomer customer { get; set;}
public ICustUtil util { get; set;}
}
public class ChildController : ParentController
{
//no issue here
public string Get()
{
customer = util.GetCustomers();
}
}
如果我将父 class 属性设为受保护并尝试使用它们,我会得到 Object NULL reference Exception
public class ParentController : ApiController
{
protected ICustomer customer { get; set;}
protected ICustUtil util { get; set;}
}
public class ChildController : ParentController
{
//Object Null reference exception at run time here
public string Get(){
customer = util.GetCustomers();}
}
我想了解将 public
更新为 protected
访问说明符有何不同。
请注意:-
- I am using
Castle Windsor DI
container
请暂时忽略命名规则。
我猜您正在通过像 AutoFac 这样的 IoC 容器实例化这些 classes 的实例,并且您正在使用 setter 注入。否则我看不出第一个例子是如何工作的,因为你从来没有初始化 util
.
当成员受到保护时,IoC 容器无法对其进行初始化。只有 public 成员可以通过 class 本身之外的代码访问。