C# Windsor未安装依赖项
在Asp.Net中使用依赖项注入和IoC时,我是个新手。由于这是一个小项目,所以我的应用程序被分为同一项目的多个目录 我有一些服务,我想注入到我的控制器。它们都从空接口继承: 服务的安装程序如下所示: 和GlobalAsax文件: 我已经调试并注意到我的ServicesInstaller类确实被调用,但是,依赖项没有安装,因为在我的控制器中,我的一个服务的实例被保留为空 有没有人知道我应该如何正确设置它 我希望能够在控制器中使用依赖项,如下所示:C# Windsor未安装依赖项,c#,asp.net-mvc,castle-windsor,C#,Asp.net Mvc,Castle Windsor,在Asp.Net中使用依赖项注入和IoC时,我是个新手。由于这是一个小项目,所以我的应用程序被分为同一项目的多个目录 我有一些服务,我想注入到我的控制器。它们都从空接口继承: 服务的安装程序如下所示: 和GlobalAsax文件: 我已经调试并注意到我的ServicesInstaller类确实被调用,但是,依赖项没有安装,因为在我的控制器中,我的一个服务的实例被保留为空 有没有人知道我应该如何正确设置它 我希望能够在控制器中使用依赖项,如下所示: public class TestCont
public class TestController : Controller
{
private readonly IPDFService _pdfService;
[HttpGet]
public ActionResult Index()
{
//PDFService service = new PDFService();
string pdfFile = _pdfService.GenerateAgendaPdfFromURL("http://google.com", 1);
return View((object)pdfFile);
}
}
Classes.FromThisAssembly().BasedOn<IService>().WithServiceSelf()
谢谢,如中所述,您必须向接受服务的控制器添加构造函数。或者,您可以更改您的会员private readonly IPDFService\u pdfsservice代码>到公共属性。温莎也将注入属性
此外,您应该向服务注册中添加.WithServiceSelf()
,如下所示:
public class TestController : Controller
{
private readonly IPDFService _pdfService;
[HttpGet]
public ActionResult Index()
{
//PDFService service = new PDFService();
string pdfFile = _pdfService.GenerateAgendaPdfFromURL("http://google.com", 1);
return View((object)pdfFile);
}
}
Classes.FromThisAssembly().BasedOn<IService>().WithServiceSelf()
Classes.fromthissembly().BasedOn().WithServiceSelf()
这只注册服务的类型,而不是所有实现的接口或继承的类型。尝试在TestController中创建一个构造函数,该构造函数将依赖项IPDFService作为参数。容器将解析它。您的控制器上似乎缺少构造函数,该构造函数接受IPDFService
,并将该参数分配给\u pdfsservice
。不过我只是在猜测,因为我不认识温莎。您是否考虑过在最初的学习中尝试更轻的IoC引擎?DryIoc或Autofac会更容易。谢谢,伙计,我完全忘了把它添加到构造函数中。