需要在 C# MVC 中将控制器的操作方法调用到另一个类中



我在控制器中创建了一个方法,但我需要在另一个类中调用此方法,我不知道如何调用它。

我的示例代码:-

  public class ReportController : BaseController
    {
        private readonly IPermissionService _permissionService;
        private readonly ICompaniesService _companyService;
       public ReportController(IPermissionService permissionService,
            ICompaniesService companyService)
       {
            this._permissionService = permissionService;
            this._companyService = companyService;
       }
        public void Reporting()
        {
            // code
        }
      }

    public class Home {
        public void Execute()
        {
            //I need to execute the Reporting method here
        }
    }

我已经尝试了很多东西来在另一个类方法中调用我的方法,但我无法让它工作。

控制器中有一些代码,必须在多个地方调用,这是一种糟糕的设计方式。在项目或包含此代码的外部 DLL 中创建一个类,并在需要此方法的控制器中调用此类。

在某处(在项目中或类库中)创建一个类:

public class MyClass
{
    public MyClass()
    {}
    public void MyMethod()
    {
      // Some code here
    }
}

并在需要此代码的控制器或类中实现此代码。

public class ReportController : BaseController
    {
        private readonly IPermissionService _permissionService;
        private readonly ICompaniesService _companyService;
       public ReportController(IPermissionService permissionService,
            ICompaniesService companyService)
       {
            this._permissionService = permissionService;
            this._companyService = companyService;
       }
        public void Reporting()
        {
            MyClass myClass = new MyClass();
            myClass.MyMethod();
        }
}

顺便说一下,如果你的代码不需要任何实例,你可以创建一个静态类,比如:

public static class MyClass
{
    public static void MyMethod()
    {
       // Some code here
    }
}
public class ReportController : BaseController
{
       private readonly IPermissionService _permissionService;
       private readonly ICompaniesService _companyService;
       public ReportController(IPermissionService permissionService,
            ICompaniesService companyService)
       {
            this._permissionService = permissionService;
            this._companyService = companyService;
       }
        public void Reporting()
        {
            MyClass.MyMethod();
        }
}

有两种方法可以实现此目的。您在控制器的构造函数中使用依赖注入,因此您有两种选择(不确定我是否错过了任何内容?

  • 在调用方法中创建每个服务的实例,并在实例化控制器时传递这些实例,或者
  • 将构造函数添加到家庭类,设置服务并在实例化控制器时传递它们

选项 1:

public class Home
{
     public void Execute()
     {
          // Create the variables that are needed by the constructor
          IPermissionService permissionService = new PermissionService();
          ICompaniesService companiesService = new CompaniesService();
          // Create an instance of your controller and pass through
          // the variables created above
          ReportController reportController = new ReportController(permissionService, companiesService);
          // Now that you have an instance of your controller call the method
          reportController.Reporting();
     }
}

它的工作原理与创建类的实例然后调用其方法相同。

选项 2:

public class Home
{
     private IPermissionService permissionService;
     private ICompaniesService companiesService;
     public Home(IPermissionService permissionService, ICompaniesService companiesService)
     {
          this.permissionService = permissionService;
          this.companiesService = companiesService;
     }
     public void Execute()
     {
          ReportController reportController = new ReportController(permissionService, companiesService);
          reportController.Reporting();
     }
}
ReportController reportController = new ReportController();
reportController.Reporting();

就像任何其他类一样,该方法不是静态的

请阅读此答案,他们比我更详细

最新更新