我有两个名为LoginController和RegisterController的控制器和一个函数'公共静态字符串Encrypt(string toEncrypt,bool useHashing)'在RegisterController中定义。如何从LoginController调用它?
我使用了var result= new RegisterController().Encrypt(newpass, true);
代码但结果如下:
错误4成员' AP.WebApp.Controllers.RegisterController.Encrypt(string,bool)'无法使用实例引用访问;使用类型名称来限定它
答案 0 :(得分:2)
你可以用继承来解决这个问题。
示例:
public abstract class BaseController : Controller
{
//Common functionality between controllers go here
protected static string Encrypt(string toEncrypt, bool useHashing)
{
//Your content
}
}
public class LoginController : BaseController //not Controller anymore
{
//Encrypt is now available
//...Your controller methods here
}
public class RegisterController : BaseController //not Controller anymore
{
//Encrypt is now available
//...Your controller methods here
}
答案 1 :(得分:1)
正如其他人所说,从一个控制器到另一个控制器共享静态方法并不是一个好的设计。
我建议你创建一个新类,例如Common,它包含你的共享函数的定义。它可能看起来像:
public class MyCommonUtilities
{
public static string Encrypt(string ToEncrypt, bool useHashing)
{
// insert code here
}
}
如果你在一个单独的公共项目中定义它,那么一定要在两个控制器中包含这个类(注意:如果你在与控制器相同的命名空间中定义这个类,则不需要)
using MyCommonUtilities;
并在每个控制器中将其调用到您需要的位置。这将方法集中到一个公共代码段中,并使其可以一致地用于任何控制器。
答案 2 :(得分:0)
你的方法在寄存器控制器上是静态的,所以你只需要调用:
RegisterController.Encrypt(newpass,true);
或从方法中删除静态关键字。
答案 3 :(得分:0)
我建议创建一个Encrypt类,它具有Encrypt静态类。然后你可以随心所欲地调用它。
答案 4 :(得分:0)
这不是从另一个控制器调用一个方法的好方法。为此创建公共公共类,可以从项目的任何地方访问。
一个简单的解决方案是在JsonResult
中使用RegisterController
创建一个方法,在方法中添加您的功能和计算。通过http WebRequest调用此方法。
答案 5 :(得分:0)
我有一个方法,创建一个继承自Controller的基本控制器,然后这两个控制器将由新创建的基本控制器继承,它具有公共代码(加密),以便您可以在两个控制器中调用方法。