簡體   English   中英

來自另一個類 MVC C# 的訪問控制器方法

[英]Access Controller method from another Class MVC C#

我有一個帶有方法 foo () 的 HomeController。 現在我想從一個普通的類 Class.cs 訪問 HomeController 的方法 foo()。 我怎么做?

提前致謝

如果您使用的是 ASP.Net Core,則可以在Startup.cs文件中添加自定義類和控制器:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<MyClass>();
        services.AddMvc().AddControllersAsServices();
        // ...
    }

    // ...
}

之后,您可以在自定義類中注入控制器:

public class MyClass
{
    public MyClass(MyController controller)
    {
       // ...
    }
}

然后你可以請求自定義類的實例(例如serviceProvider.GetService<MyClass>() ),控制器將被注入到這個類中。

如果您需要從另一個控制器返回視圖,則必須使用 Redirect 方法之一。

如果您需要重用某些代碼,最簡單的方法是創建另一個類,例如 Common 並將方法 foo 放在那里,作為靜態更好。

public class Common
{
public static void Foo() {}
}

在此之后,您可以在代碼中的任何位置、任何控制器的任何操作中使用它

public classs HomeController:Controller
{
   public IActionResult MyAction()
   {
           Common.Foo();
          .....other code
         return View();
    }
}

附注。 我不認為創建和注入整個控制器或僅使用其中一種方法的類是個好主意。

ps2。 如果 Foo 代碼包含一些與 dbContext 一起使用的代碼,最好創建一個存儲庫並將代碼放在那里。

通常,我們會把方法放到一個服務中,在startup.cs中注冊,然后使用DI獲取服務,然后調用服務中的方法。如果想調用控制器中的方法,也可以這樣做直接這樣:

家庭控制器:

public class HomeController : Controller
    {
        

        public HomeController()
        {
        }
        public string foo()
        {
            return "Calling foo!";
        }
    }

我的課:

public class MyClass
    {
        public string callFoo()
        {
            HomeController h = new HomeController();
            return h.foo();
        }
    }

測試動作:

public void Index()
{
    MyClass n = new MyClass();
    var s = n.callFoo();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM