尝试运行依赖关系注入时出现空引用异常
本文关键字:引用 异常 试运行 依赖 关系 注入 | 更新日期: 2023-09-27 18:30:31
我正在学习ASP.Net MVC
.我指的是亚当·弗里曼(Adam Freeman)Pro Asp.Net MVC 4
书。我遇到了一个主题名称Building Loosely Couple App
在依赖注入中,我没有得到它的实际含义,所以我试图用捷径写他的例子。
我创建了一个界面IReservation
如下
public interface IReservation
{
string getName();
}
以及实现它的类,如下所示
public class Reservation:IReservation
{
public string getName()
{
return "Wooww... It worked :D ";
}
}
然后我将接口的对象传递给我的控制器构造函数,就像在书中一样。我有如下控制器代码
public class HomeController : Controller
{
IReservation res;
public HomeController(IReservation reservation)
{
res = reservation;
}
public HomeController() { }
public ActionResult Index()
{
string me = res.getName();
return View();
}
}
调试时,我正在NullReferenceException
在线string me = res.getName();
.我相信这是因为我没有使用关键字创建它的实例new
但我不确定。我在这里是对的,如果是,那么如何纠正这个例子?我在Models
文件夹中有接口和实现类。
您应该删除控制器的默认构造函数,该构造函数永远不会注入任何IReservation
实例:
public HomeController() { }
现在,控制器定义变为:
public class HomeController : Controller
{
private readonly IReservation reservation;
public HomeController(IReservation reservation)
{
this.reservation = reservation;
}
public ActionResult Index()
{
string me = this.reservation.getName();
return View();
}
}
现在剩下的就是引导和配置您喜欢的 DI 框架,以便在控制器中注入正确的IReservation
实例。
例如,如果您在引导中使用Ninject.MVC
:
kernel.Bind<IReservation>.To<Reservation>();
如果您使用的是其他一些 DI 容器,则显然应该使语法适应它,并在引导应用程序时注册正确的实例。