C#如何使用接口

这是一个相对直截了当的问题。 但我想知道通过使用接口访问单独项目中的方法的正确用法是什么。

项目Test.ClassLibrary

界面

 public interface ITest { string TestMethod(); } 

分类

 public class Test : ITest { public string TestMethod() { return "Test"; } } 

项目: Test.Web

控制器

 public class HomeController : Controller { private ITest test; public ActionResult Index() { return Content(test.TestMethod()); } } 

以上返回NullReferenceException 。 我假设它是因为控制器到达接口,并且不知道接下来要去哪里。

解决这个问题的最佳方法是什么? 我是否必须在控制器中引用Test类,或者我可以通过仅引用ITest

  • 你永远不会实例化ITest test ,你只需要声明它。
  • 您的Test类不会从接口inheritance。

您需要更新您的class级声明

 public class Test : ITest // interface inheritance { 

并在您的控制器中,实例化test

 ITest test = new Test(); 

随着您的进一步发展,您将需要探索将Test实例注入控制器的技术,以便您不必依赖它,而只是在ITest接口上。 注释提到IoC或控制反转,但您应该研究各种依赖性反转技术技术(IoC是其中之一, dependency injection等)。

该课程需要阅读:

 public class Test : ITest 

在其声明中。

首先,您需要让Test类inheritance/实现ITest

 class Test : ITest { public string TestMethod() { return "test"; } } 

然后,在您的控制器类中,您需要初始化test – 无论是直接还是在构造函数中。

 public class HomeController : Controller { public ITest test = new Test(); public ActionResult Index() { return Content(test.TestMethod()); } } 

虽然在许多情况下,您应该更喜欢在构造函数之外创建ITest并将其传递给某个东西。