【问题标题】:Constructor Injection pattern using C# and Autofac使用 C# 和 Autofac 的构造函数注入模式
【发布时间】:2015-07-24 10:22:27
【问题描述】:

我对 DI 模式有点陌生,手头有一些问题。 整个故事是这样的:

  • 有一个名为“DataGenerator”的控制台应用程序负责生成 整个应用程序的样本数据。此项目中添加了对“Autofac”的引用。以下是用于创建国家/地区列表的代码 sn-p:

上述 foreach 循环中出现的异常表示:

{“‘Autofac.Core.Activators.Reflection.DefaultConstructorFinder’找不到任何构造函数 关于类型 可以使用可用的服务和参数调用“TechnicalTest.Service.AppServices.CountryService”:\r\n无法解析参数 构造函数'Void'的'TechnicalTest.Repository.EntityRepositories.ICountryRepository countryRepository' .ctor(TechnicalTest.Repository.EntityRepositories.ICountryRepository, TechnicalTest.Repository.UnitOfWork.IUnitOfWork)'。"}

  • 还有另一个项目包括应用服务。以下是其中之一:

请注意,已添加 GenericRepository 和 UnitOfWork 项目来介绍每个实体存储库。例如:

我已经在网上搜索了异常以及如何解决它,但不幸的是无法为我的案例找到解决方案。我想 CountryService 构造函数或类似的东西一定有问题。 任何帮助或想法将不胜感激。

【问题讨论】:

  • 您的容器注册DbContext了吗?从错误消息看来,问题在于解决 CountryRepository 的依赖关系,这就是问题所在。
  • @JackHughes:很抱歉我发布的主类的代码错过了一行代码builder.RegisterType<CountryService>().As<ICountryService>();。服务还不够用还是DbContext也要注册?
  • 在容器中注册的类的所有依赖项都必须在容器中注册。容器如何在没有它所需的所有依赖项的情况下创建CountryRepository 的实例?
  • ..看来你是对的...我应该这样做,看看会发生什么
  • @JackHughes:谢谢一百万.. 现在它工作正常,我很高兴.. 还有一个问题:注册DbContext 我已经参考了我的Model已编写 DbContextDbSet<T> 的项目。你认为这种引用在设计和架构方面会很好吗?我想这听起来不错,因为我不知道任何其他行动方案..

标签: c# dependency-injection repository-pattern


【解决方案1】:

您是否在您的容器中注册了DbContext?从错误消息看来,问题在于解决 CountryRepository 的依赖关系。

在容器中注册的类的所有依赖项都必须在容器中注册。容器如何在没有它所需的所有依赖项的情况下创建CountryRepository 的实例?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多