问候大家,首先让我感激地说,我已经对现有问题进行了搜索无济于事。
如果我错过了一个解决这一具体问题的机构,请原谅我。此.NET Core 3.1 Web API在解决方案中使用另一个项目ClassLibrary支持其HTTP Verb方法。ClassLibrary中的一个类称为Cars,它是从ICars继承的,可能只是出于.NET Core的默认依赖关系注入的目的,但是当然,它用于Controller CarController(注入了构造函数)。
但是,还有另一个Controller BlueCarsController通过其接口IBlueCars使用ClassLibrary BlueCars。注意,接口公开了在各个类中实现的完全独立的,各自不同的方法。
我试图正确注入继承的接口:
services.AddScoped<IBlueCars, BlueCars>();
导致编译错误:
“无法将类型'ModelsClassLibrary.BlueCars'用作通用类型或方法'ServiceCollectionServiceExtensions.AddScoped <TService,TImplementation>(IServiceCollection)'中的类型参数'TImplementation '。没有从'ModelsClassLibrary.BlueCars'到的隐式引用转换。'ModelsClassLibrary.IBlueCars'。 ”
该实现的重要性并不高,我无法通过将BlueCars的功能结合到Cars类中来轻松解决,但是让我们面对现实,毕竟它们毕竟是“ BlueCars”,这不合适。
我不喜欢这个标记,但是谢谢
//---------------------class BlueCars--------------------------
namespace ModelsClassLibrary
{
public interface IBlueCars
{
Task<CallsListDto> GetBlueCarsAsync(string Id, int OtherId, string brand);
}
public class BlueCars : Cars
{
private readonly ILogger<IBlueCars> _logger;
private readonly ISomeApiService _someWebApiService;
private readonly ICars _cars;
private readonly IBlueCars _blueCars;
private readonly IConfiguration _configuration;
public BlueCars(ISomeApiService crmWebApiService,
ILogger<IBlueCars> logger,
ICars cars,
IConfiguration configuration,
IBlueCars _blueCars
)
{
_crmWebApiService = crmWebApiService;
_logger = logger;
_cars = cars;
_configuration = configuration;
}
public async Task<Cars> GetBlueCarsAsync(
string Id,
int OtherId,
string brand)
{
var results = new List<Cars>();
// blah blah Do Stuff
}
}
}
//---------------------class Cars--------------------------
namespace CrmDataAccess
{
public interface ICars
{
Task<CarsListDto> GetCarsAsync(string user, string someBrand);
}
public class Cars: ICars
{
public const int Nopage = -1; // Move to crmStringThingie
private readonly ILogger<CallList> _logger;
private readonly ICrmWebApiService _crmWebApiService;
private readonly IConfiguration _configuration;
public CallList(ICrmWebApiService crmWebApiService, ILogger<CallList> logger, IConfiguration configuration)
{
_logger = logger;
_crmWebApiService = crmWebApiService;
_configuration = configuration;
}
public async Task<Dictionary> GetCarsAsync(string user, string someBrand);
{
var result = new CarsListDto();
// dance fly iterate harvest wash rinse repeat make cool stuff call a service whatever tada!
return result;
}
}
}
//-------------------ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
// various config stuff authentication stuff ommitted
services.AddScoped<ICars, Cars>(); // Works fine for CarsController
services.AddScoped<IBlueCars, BlueCars>(); // Since BlueCars inherits from Cars how do you do this correctly ?
// the interfaces expose completely different Get methods
//---- Various Configure stuff Swagger stuff blah blah
}
//-------------------------------
namespace SomeWebApi.Controllers
{
public class CarsController : BaseController // default logger implementation & other stuff
{
private readonly ISomeService _someService;
private readonly ICars _cars;
public CallsController(ISomeService _someService, ICars cars, ILogger<CallsController> logger) : base(_someService, logger)
{
_cars = cars;
}
[HttpGet]
public async Task<CarsListDto> GetAsync(string user, string someBrand)
{
CarsListDto results = await _cars.GetCarsAsync(user,someBrand);
return result;
}
}
}
//-------------------------------
namespace SomeWebApi.Controllers
{
public class BlueCarsController : BaseController // default logger implementation & other stuff
{
private readonly ISomeService _someService;
private readonly IBlueCars _blueCars;
public BlueCarsController(ISomeService _someService, IBlueCars blueCars, ILogger<CallsController> logger) : base(_someService, logger)
{
_blueCars = blueCars;
}
[HttpGet]
public async Task<CarsListDto> GetAsync(string id,string brand)
{
// magically get parameters for GetAsync
CarsListDto results = await _blueCars.GetBlueCarsAsync(Id, OtherId,someBrand);
}
}
}
根据显示的代码,该错误消息是准确的。BlueCars
不源自IBlueCars
重构BlueCars
源于IBlueCars
而不是Cars
public class BlueCars : IBlueCars {
//...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句