首页 > 解决方案 > 如何将控制器(控制器名称)作为参数传递给另一个方法?

问题描述

所以我想知道是否可以将控制器作为参数发送给另一个方法。我想要完成的是通过采用两个参数(控制器名称和方法名称)来创建一个类似于文件路径构建器的方法。

我在控制器中有一个方法,如下所示:

  public async Task GetActiveCountyRegulationByIdSuccess()
    {

        FilePathBuilder builder = new FilePathBuilder();
        builder.FilePath(CountyControllerTest,GetActiveCountyRegulationByIdSuccess);
        ...

所以我的控制器的名称是 CountyControllerTest,我的方法的名称是 GetActiveCountyRegulationByIdSuccess。我想将这两个参数发送到:

 public class FilePathBuilder
   {

    public string FilePath(object controller, object method)
       {
        var filePath = "testfiles/" + nameof(controller) + nameof(method) + "Actual.xml";

        return filePath;
       }
   }

并将 FilePath 方法中构建的字符串返回给我的控制器。问题是当我尝试将它作为参数传递时,我的控制器中出现错误。错误消息表明“CountyController”是一种类型,在给定的上下文中无效。

任何答案表示赞赏。

标签: c#model-view-controller.net-core

解决方案


您收到此错误是因为您没有传递类实例。您可以做的是更改您的方法,使其接受一个类型,然后您可以从那里获得类名。像这样:

  public async Task GetActiveCountyRegulationByIdSuccess()
    {

        FilePathBuilder builder = new FilePathBuilder();
        builder.FilePath(typeof(CountyControllerTest), typeof(GetActiveCountyRegulationByIdSuccess));
        ...

然后 builder 方法接受 2 个类型参数并使用它们的名称:

public class FilePathBuilder
   {

    public string FilePath(Type controllerType, Type methodType)
       {
        var filePath = "testfiles/" + controllerType.Name  + methodType.Name + "Actual.xml";

        return filePath;
       }
   }

推荐阅读