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
并将其传递给某个东西。