从注入的类(C#)调用方法时出错

时间:2016-10-19 02:53:23

标签: c# dependency-injection

我有一个IUser接口,用于实现void GetTasks()string GetRole() 然后我创建了一个类。

public class EmployeeRole : IUser
{
    public void GetTasks()
    {
     //Get task 
    }

    public string GetRole()
    {
        return "Employee";
    }

    public void EmployeeSpecificTask()
    {
        Console.Write("This is an employee's specific task.");
    }
}

创建类和接口后我计划在我的Profile.cs类上注入该类。这是代码:

`public class Profile
    {
    private readonly IUser _user;

    public Profile(IUser user)
    {
        this._user = user;
    }
    public void DisplayTask()
    {
        _user.GetTasks();

    }
    public string MyRole()
    {
        return _user.GetRole();
    }

    //The error goes here
    public void MySpecificTask()
    {
        _user.EmployeeSpecificTask();
    }
    public void Greetings()
    {
        Console.WriteLine("Hello! Welcome to profile.");
    }
}

注射测试程序 Profile profile = new Profile(new EmployeeRole());

我的问题是,在调用EmployeeSpecificTask()时我收到错误的原因是什么? 我的EmployeeRole类上有EmployeeSpecificTask()

1 个答案:

答案 0 :(得分:1)

如果IUser界面如下:

public interface IUser
{
void GetTasks();
void GetRole();
}

然后,只有IUser对象的消费类才能访问该接口上的方法或属性。 如果要传递包含EmployeeSpecificTask()方法的接口类型,则需要定义另一个接口,如下所示:

public interface INewInterface : IUser 
{ 
  void EmployeeSpecificTask(); 
}

这将IUser接口与新接口相结合,使消费类可以访问IUser方法和您想要访问的新方法。 然后应该修改您的Profile构造函数以取代新的接口类型。

public class Profile
{
  private readonly INewInterface _user;

  public Profile(INewInterface user)
  {
      this._user = user;
  }

  public void DisplayTask()
  {
    _user.GetTasks();

  }

  public string MyRole()
  {
    return _user.GetRole();
  }

  public void MySpecificTask()
  {
    _user.EmployeeSpecificTask();
  }

  public void Greetings()
  {
    Console.WriteLine("Hello! Welcome to profile.");
  }
}