C#如何使用接口

jzm*_*jzm 14 c# interface

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

项目:Test.ClassLibrary

界面:

public interface ITest
{
    string TestMethod();
}
Run Code Online (Sandbox Code Playgroud)

课程:

public class Test : ITest
{
    public string TestMethod()
    {
        return "Test";
    }
}
Run Code Online (Sandbox Code Playgroud)

项目: Test.Web

控制器:

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

Ant*_*ram 20

  • 你永远不会实例化ITest test,你只是声明它.
  • 您的Test类不从接口继承.

您需要更新您的班级声明

public class Test : ITest // interface inheritance 
{
Run Code Online (Sandbox Code Playgroud)

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

ITest test = new Test();
Run Code Online (Sandbox Code Playgroud)

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

  • 或者,不是实例化Test,而是可以使用IoC容器来解决ITest的具体类. (2认同)

小智 5

该课程需要阅读:

public class Test : ITest
Run Code Online (Sandbox Code Playgroud)

在其声明中.