我试图在当前项目中使用LightInject,但我一直得到一个null值。我有一个MVC 5的web应用程序和一个附加的业务层。我已经安装了LightInject。Mvc和LightInject。我的Web项目中的Web。我已经安装了LightInject。Mvc在我的商业项目中。
在业务层,我有一个compositionRoot.cs文件:
using LightInject;
using SimpleKB.Business.Commands;
namespace SimpleKB.Business
{
public class CompositeRoot : ICompositionRoot
{
public void Compose(IServiceRegistry serviceRegistry)
{
serviceRegistry.Register<IRegisterUserCommand, RegisterUserCommand>();
serviceRegistry.Register<ICreateCategoryCommand, CreateCategoryCommand>();
serviceRegistry.Register<IUpdateCategoryCommand, UpdateCategoryCommand>();
}
}
}
接下来,在web项目的Global.asax.cs中,我在app_start方法中有以下内容:
var serviceContainer = new ServiceContainer();
serviceContainer.RegisterFrom<Business.CompositeRoot>();
serviceContainer.EnableMvc();
最后,我的控制器代码如下:
public class AccountController : Controller
{
public IRegisterUserCommand RegisterUserCommand { get; set; }
[HttpGet]
[AllowAnonymous]
public ActionResult Login()
{
RegisterUserCommand.Execute();
return View();
}
}
当代码尝试使用RegisterUserCommand时,我基本上在控制器中得到了null异常。我假设LightInject在遇到接口时会自动注入代码。我错过了什么?
我在查看LigtInject的代码后发现了这一点。Mvc项目。基本上,我的global.asax.cs中的代码应该如下所示:
var serviceContainer = new ServiceContainer();
serviceContainer.RegisterFrom<Business.CompositeRoot>();
serviceContainer.RegisterControllers();
serviceContainer.EnableMvc()