ASP.NET MVC 5和LightInject

时间:2016-10-20 15:36:01

标签: asp.net-mvc-5 light-inject

我正在尝试将LightInject与我当前的项目一起使用,但我一直得到一个空值。我在MVC 5中有一个Web应用程序,并附带了一个业务层。我在我的web项目中安装了 LightInject.Mvc LightInject.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在遇到接口时自动注入代码。我错过了什么?

1 个答案:

答案 0 :(得分:0)

在查看LigtInject.Mvc项目的代码后,我想出来了。基本上,我的global.asax.cs中的代码应如下所示:

var serviceContainer = new ServiceContainer();
serviceContainer.RegisterFrom<Business.CompositeRoot>();
serviceContainer.RegisterControllers();
serviceContainer.EnableMvc()