试图理解继承链

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 本身之外的代码访问。