未解决的依赖[类服务层]

时间:2017-02-11 18:06:07

标签: c# asp.net asp.net-mvc dependency-injection light-inject

我在asp mvc中使用光注入。

在asp mvc中的global.asax中使用此代码。

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        var container = new ServiceContainer();
        container.RegisterControllers();
        container.RegisterControllers(typeof(Areas.Admin.AdminAreaRegistration).Assembly);
        container.Register<INewsService, NewsService>(new PerScopeLifetime());
        container.Register<ICategoryService, CategoryService>(new PerScopeLifetime());
        container.EnableMvc();
    }

并在控制器中:

private readonly INewsService _newsservice;
    private readonly ICategoryService _categoryservice;
    public AdminController(INewsService newsservice, ICategoryService categoryservice)
    {
        _newsservice = newsservice;
        _categoryservice = categoryservice;
    }

但是它显示了这个错误:

  
    

未解决的依赖项[目标类型:DA.Service.Service.NewsService],[参数:存储库(DA.Data.Repository.Repository 1[DA.Data.Domain.News])], [Requested dependency: ServiceType:DA.Data.Repository.Repository 1 [DA.Data.Domain.News],ServiceName:] < / p>   

问题是什么?

2 个答案:

答案 0 :(得分:0)

显然你需要告诉Unity DA.Data.Domain.News的实现是什么。

NewsService取决于News,并且无法隐式解析(找不到,或者本身有一些依赖)。

另外,你错误地在MVC中使用Unity。使用Unity for MVC NuGet。

答案 1 :(得分:0)

该错误表明您的INewsService和ICategoryService都具有未在容器中注册的依赖项(存储库)。您需要注册整个对象图。我希望您的注册看起来像:

    var container = new ServiceContainer();
    container.RegisterControllers();
    container.RegisterControllers(typeof(Areas.Admin.AdminAreaRegistration).Assembly);
    container.Register<INewsService, NewsService>(new PerScopeLifetime());
    container.Register<IRepository<News>, Repository<News>>(new PerRequestLifetime());
    container.Register<ICategoryService, CategoryService>(new PerScopeLifetime());
    container.Register<IRepository<Category>, Repository<Category>>(new PerRequestLifetime());
    container.EnableMvc();