.Net核心依赖注入和类继承

基督教程序员

问候大家,首先让我感激地说,我已经对现有问题进行了搜索无济于事。

如果我错过了一个解决这一具体问题的机构,请原谅我。此.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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类库内.net核心中的依赖注入

来自分类Dev

.net核心依赖注入与很少使用的静态类

来自分类Dev

.net 核心方法依赖注入

来自分类Dev

PHP依赖注入和继承

来自分类Dev

PHP依赖注入和继承

来自分类Dev

GraphQL dotnet核心查询类依赖注入

来自分类Dev

如何对继承的类使用依赖注入?

来自分类Dev

ASP.NET核心依赖项注入

来自分类Dev

.NET核心依赖注入解决问题

来自分类Dev

ASP.NET核心依赖项注入

来自分类Dev

asp.net核心中的依赖注入

来自分类Dev

具体.Net类的依赖注入

来自分类Dev

NET类库的依赖注入?

来自分类Dev

同时使用继承和依赖注入

来自分类Dev

网络核心Web API项目的类库内的依赖注入

来自分类Dev

Laravel依赖注入与继承

来自分类Dev

相互依赖的类和继承

来自分类Dev

如何从Asp.net核心依赖项注入中的已注册子类解析父类实例

来自分类Dev

Stripe.Net类的依赖注入

来自分类Dev

包装器类和依赖项注入

来自分类Dev

Spring依赖注入和泛型类

来自分类Dev

在组件和依赖注入中使用类

来自分类Dev

以编程方式注入asp.net核心的依赖项

来自分类Dev

Angularjs Typescript控制器继承和依赖注入

来自分类Dev

扩展类的依赖注入?

来自分类Dev

Pojo 类的依赖注入

来自分类Dev

在依赖注入实例化类之前是否触发了 Aspnet 核心身份验证?

来自分类Dev

无法在资源类中注入@Service和@Contract依赖项

来自分类Dev

PHP依赖关系注入和从伞形类的扩展