【发布时间】: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已编写DbContext和DbSet<T>的项目。你认为这种引用在设计和架构方面会很好吗?我想这听起来不错,因为我不知道任何其他行动方案..
标签: c# dependency-injection repository-pattern