我正在从事一个处理天气模型数据的项目。这些模型是不同的,但是每个不同模型中的函数调用逻辑是相同的。每个模型都会生成大量与其相关的数据,然后提供“运行”命令。
我有一个服务,该服务是在调用名为Run
的函数之前获取需要运行的数据负载的请求。这个run
函数对于所有模型都是通用的,因此我开发了一个称为IIndividualModelRunService
的接口。但是我遇到了一个问题。无论使用哪种模型,都存在此问题。
我以前有这个构造函数:-
public HRRRModelQueryService(IHRRRModelQueryRequestService hrrrModelQueryRequestService, IIndividualModelRunService modelRunService)
{
_hrrrModelQueryRequestService = hrrrModelQueryRequestService;
_modelRunService = modelRunService;
}
IIndividualModelRunService具有三个实现,每个实现一个,用于执行特定于模型的不同工作。一段时间后,我注意到,无论我在项目中走了哪条路,似乎都只有三个月之一。通过Model1代码,Model2代码或Model3代码。
上面的代码虽然运行不正确,但仍可以编译并运行。
我尝试将构造函数更新为此,在`IIndividualModelRunService中传递类型,希望指定我希望它调用的服务会有所帮助:-
public HRRRModelQueryService(IHRRRModelQueryRequestService hrrrModelQueryRequestService, IIndividualModelRunService<HRRRModelRunService> modelRunService)
{
_hrrrModelQueryRequestService = hrrrModelQueryRequestService;
_modelRunService = modelRunService;
}
但是我现在在项目加载时遇到此异常,我怀疑这是我没有正确注册的东西:-
在类型为'ModelRunDownloader.Domain.GFS.GFSModelQueryService'的'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'中找不到任何构造函数,可以使用可用的服务和参数来调用: 无法解析构造函数'Void .ctor(ModelRunDownloader.Domain.GFS.IGFSModelQueryRequestService,ModelRunDownloader.Domain.ModelService.IIndividualModelRunRuner'1 [ModelRunDownloader.Domain.GFS.GFSModelQueryService] modelRunService'的参数'ModelRunDownloader.Domain.ModelService.IIndividualModelRunService'1 [ModelRunDownloader.Domain.GFS.GFSModelQueryService] modelRunService' .Domain.GFS.GFSModelQueryService])'。
在我的容器构建器中,我得到了所有带有我的项目名称前缀的程序集,这些程序集在我测试了此程序之后可以正常工作,然后编写以下命令:-
var assemblyList = assemblies.ToArray();
builder.RegisterAssemblyModules(assemblies);
builder.RegisterByAttributes(assemblies);
builder.RegisterInstance(Assembly.GetExecutingAssembly()).As<_Assembly>();
return builder.Build();
我只是想知道是否由于在该接口中传递了该类型而需要在此处手动指定某些内容,还是我完全走错了路线?对于autofac来说是相当新的东西,因此非常感谢您提供反馈!