2016-04-25 55 views
1

我已经在控制器中创建了一个方法,但我需要调用这个方法到另一个类,我不知道如何调用它。需要调用控制器的动作方法到另一个类在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 
     } 

    } 

我已经尝试了许多事情,叫我在另一个类的方法方法,但我不能得到它的工作。

+4

'新ReportController()报告();' –

+0

可能的复制。 [如何使C#类中的方法调用另一个?](http://stackoverflow.com/questions/16226444/how-to-make-method-call-another-one-in-classes-c) – Draken

+0

是吗?您可以创建报告方法为静态? – Mukund

回答

0
ReportController reportController = new ReportController(); 
reportController.Reporting(); 

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

请仔细阅读this答案,他们进入一个有更详细的比我还多

+0

在参数化contructure我不能crate crate控制器的对象,我也有实现BaseController的方法到报告控制器,所以我不能直接创建对象 – vijay

+0

你应该使用DI库或为每个参数创建一个新的实例,你可以使用'StructureMap '它的炉排 –

1

实现这一点有两种方式。您正在使用依赖注入在控制器的构造函数,所以你有这样的两个选项(不知道我是否错过了?):

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

选项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(); 
    } 
} 
+0

但是把方法放在可以在多个地方使用的控制器中并不是一个好主意。 – Mukund

+0

这不是我的代码:)告诉OP .. –

3

这是一个糟糕的设计方式有一个控制器谁在几个地方被称为一些代码。在您的项目或包含此代码的外部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(); 
     } 
} 
相关问题