映射时无法解析服务类型
Unable to resolve service for type when mapping
我无法将数据从我的模型映射到我的 modelDto(在下面的示例中,由于我工作场所的内部代码实践,它被标记为状态)
然而,当我尝试 运行 编程并调用我的端点时,我收到以下错误:
Unable to resolve service for type 'project1.API.Core.Mappers.Interfaces.IMapToNew`2[Project1.API.Features.Personalisation.Personalisation,Project1.API.Features.Personalisation.Responses.PersonalisationState]' while attempting to activate 'Project1.API.Features.Personalisation.Services.PersonalisationBogusService'.
我认为我映射数据的方式有问题,但我找不到问题所在。我将 post 所有相关 类 进行概述。
public static class ServiceCollectionExtensions
{
public static void GetPersonalisationFeature(this IServiceCollection serviceCollection, IConfiguration config)
{
config.ThrowIfNull(nameof(config));
serviceCollection.AddScoped<IPersonalisationService, PersonalisationBogusService>();
}
}
class PersonalisationToPersonalisationState : IMapToNew<Personalisation, PersonalisationState>
{
public PersonalisationState Map(Personalisation model)
{
return new PersonalisationState
{
UserType = EnumExtensions.StringToEnum(model.UserType, UserType.Student),
UserRole = EnumExtensions.StringToEnum(model.UserRole, UserRole.PrimaryGuest),
BookingPeriod = EnumExtensions.StringToEnum(model.BookingPeriod, BookingPeriod.PreCheckin)
};
}
}
public class Personalisation
{
public string UserType { get; set; }
public string UserRole { get; set; }
public string BookingPeriod { get; set; }
}
public class PersonalisationState
{
[Description("Get user type based on userID")]
public UserType UserType { get; set; }
[Description("Get user role based on userID")]
public UserRole UserRole { get; set; }
[Description("Get the booking period of a user based on UserID")]
public BookingPeriod BookingPeriod { get; set; }
}
public interface IPersonalisationService
{
Task<IEnumerable<PersonalisationState>> GetPersonalisation(string Id);
}
public class PersonalisationBogusService : IPersonalisationService
{
private readonly IMapToNew<Personalisation, PersonalisationState> _mapper;
public PersonalisationBogusService(IMapToNew<Personalisation, PersonalisationState> mapper)
{
_mapper = mapper;
}
public async Task<IEnumerable<PersonalisationState>> GetPersonalisation(string Id)
{
var personalise = GetMockData();
personalise.Add(GetFakePersonalisedData());
return personalise
.Select(b => _mapper.Map(b))
.Select(b =>
{
b.UserType = UserType.Student;
return b;
})
.Select(b =>
{
b.UserRole = UserRole.PrimaryGuest;
return b;
})
.Select(b =>
{
b.BookingPeriod = BookingPeriod.PreCheckin;
return b;
});
}
private Personalisation GetFakePersonalisedData()
{
return new Personalisation
{
UserType = "Student",
UserRole = "PrimaryGuest",
BookingPeriod = "01/01/2019"
};
}
public static List<Personalisation> GetMockData()
{
return new List<Personalisation> {new Personalisation {UserType = "", UserRole = "", BookingPeriod = ""}};
}
}
public class PersonalisationController : BaseController
{
private readonly IPersonalisationService _personalisationService;
public PersonalisationController(IPersonalisationService personalisationService)
{
_personalisationService = personalisationService;
}
public async Task<ActionResult> Get([Description("Determines groups a user belongs to via their ID")] string id)
{
var result = await _personalisationService.GetPersonalisation(id);
return Ok(result);
}
}
是的,我还在startup.cs文件中添加了相关代码:
services.GetPersonalisationFeature(_配置);
目标服务需要 IMapToNew<Personalisation, PersonalisationState>
但基于异常,该类型尚未注册到服务集合。
确保所有依赖类型都添加到服务集合中。
public static class ServiceCollectionExtensions {
public static void GetPersonalisationFeature(this IServiceCollection serviceCollection, IConfiguration config) {
config.ThrowIfNull(nameof(config));
serviceCollection.AddScoped<IMapToNew<Personalisation, PersonalisationState>, PersonalisationToPersonalisationState>();
serviceCollection.AddScoped<IPersonalisationService, PersonalisationBogusService>();
}
}
以便在激活依赖时可以解决它们 类。
考虑创建派生类型
public interface IPersonalisationToPersonalisationState
: IMapToNew<Personalisation, PersonalisationState> { }
public class PersonalisationToPersonalisationState : IPersonalisationToPersonalisationState {
//...omitted for brevity
}
更新服务构造函数
public class PersonalisationBogusService : IPersonalisationService {
private readonly IMapToNew<Personalisation, PersonalisationState> _mapper;
public PersonalisationBogusService(IPersonalisationToPersonalisationState mapper) {
_mapper = mapper;
}
//...omitted for brevity
}
并确保注册新的抽象
public static class ServiceCollectionExtensions {
public static void GetPersonalisationFeature(this IServiceCollection serviceCollection, IConfiguration config) {
config.ThrowIfNull(nameof(config));
serviceCollection.AddScoped<IPersonalisationToPersonalisationState, PersonalisationToPersonalisationState>();
serviceCollection.AddScoped<IPersonalisationService, PersonalisationBogusService>();
}
}
我无法将数据从我的模型映射到我的 modelDto(在下面的示例中,由于我工作场所的内部代码实践,它被标记为状态)
然而,当我尝试 运行 编程并调用我的端点时,我收到以下错误:
Unable to resolve service for type 'project1.API.Core.Mappers.Interfaces.IMapToNew`2[Project1.API.Features.Personalisation.Personalisation,Project1.API.Features.Personalisation.Responses.PersonalisationState]' while attempting to activate 'Project1.API.Features.Personalisation.Services.PersonalisationBogusService'.
我认为我映射数据的方式有问题,但我找不到问题所在。我将 post 所有相关 类 进行概述。
public static class ServiceCollectionExtensions
{
public static void GetPersonalisationFeature(this IServiceCollection serviceCollection, IConfiguration config)
{
config.ThrowIfNull(nameof(config));
serviceCollection.AddScoped<IPersonalisationService, PersonalisationBogusService>();
}
}
class PersonalisationToPersonalisationState : IMapToNew<Personalisation, PersonalisationState>
{
public PersonalisationState Map(Personalisation model)
{
return new PersonalisationState
{
UserType = EnumExtensions.StringToEnum(model.UserType, UserType.Student),
UserRole = EnumExtensions.StringToEnum(model.UserRole, UserRole.PrimaryGuest),
BookingPeriod = EnumExtensions.StringToEnum(model.BookingPeriod, BookingPeriod.PreCheckin)
};
}
}
public class Personalisation
{
public string UserType { get; set; }
public string UserRole { get; set; }
public string BookingPeriod { get; set; }
}
public class PersonalisationState
{
[Description("Get user type based on userID")]
public UserType UserType { get; set; }
[Description("Get user role based on userID")]
public UserRole UserRole { get; set; }
[Description("Get the booking period of a user based on UserID")]
public BookingPeriod BookingPeriod { get; set; }
}
public interface IPersonalisationService
{
Task<IEnumerable<PersonalisationState>> GetPersonalisation(string Id);
}
public class PersonalisationBogusService : IPersonalisationService
{
private readonly IMapToNew<Personalisation, PersonalisationState> _mapper;
public PersonalisationBogusService(IMapToNew<Personalisation, PersonalisationState> mapper)
{
_mapper = mapper;
}
public async Task<IEnumerable<PersonalisationState>> GetPersonalisation(string Id)
{
var personalise = GetMockData();
personalise.Add(GetFakePersonalisedData());
return personalise
.Select(b => _mapper.Map(b))
.Select(b =>
{
b.UserType = UserType.Student;
return b;
})
.Select(b =>
{
b.UserRole = UserRole.PrimaryGuest;
return b;
})
.Select(b =>
{
b.BookingPeriod = BookingPeriod.PreCheckin;
return b;
});
}
private Personalisation GetFakePersonalisedData()
{
return new Personalisation
{
UserType = "Student",
UserRole = "PrimaryGuest",
BookingPeriod = "01/01/2019"
};
}
public static List<Personalisation> GetMockData()
{
return new List<Personalisation> {new Personalisation {UserType = "", UserRole = "", BookingPeriod = ""}};
}
}
public class PersonalisationController : BaseController
{
private readonly IPersonalisationService _personalisationService;
public PersonalisationController(IPersonalisationService personalisationService)
{
_personalisationService = personalisationService;
}
public async Task<ActionResult> Get([Description("Determines groups a user belongs to via their ID")] string id)
{
var result = await _personalisationService.GetPersonalisation(id);
return Ok(result);
}
}
是的,我还在startup.cs文件中添加了相关代码:
services.GetPersonalisationFeature(_配置);
目标服务需要 IMapToNew<Personalisation, PersonalisationState>
但基于异常,该类型尚未注册到服务集合。
确保所有依赖类型都添加到服务集合中。
public static class ServiceCollectionExtensions {
public static void GetPersonalisationFeature(this IServiceCollection serviceCollection, IConfiguration config) {
config.ThrowIfNull(nameof(config));
serviceCollection.AddScoped<IMapToNew<Personalisation, PersonalisationState>, PersonalisationToPersonalisationState>();
serviceCollection.AddScoped<IPersonalisationService, PersonalisationBogusService>();
}
}
以便在激活依赖时可以解决它们 类。
考虑创建派生类型
public interface IPersonalisationToPersonalisationState
: IMapToNew<Personalisation, PersonalisationState> { }
public class PersonalisationToPersonalisationState : IPersonalisationToPersonalisationState {
//...omitted for brevity
}
更新服务构造函数
public class PersonalisationBogusService : IPersonalisationService {
private readonly IMapToNew<Personalisation, PersonalisationState> _mapper;
public PersonalisationBogusService(IPersonalisationToPersonalisationState mapper) {
_mapper = mapper;
}
//...omitted for brevity
}
并确保注册新的抽象
public static class ServiceCollectionExtensions {
public static void GetPersonalisationFeature(this IServiceCollection serviceCollection, IConfiguration config) {
config.ThrowIfNull(nameof(config));
serviceCollection.AddScoped<IPersonalisationToPersonalisationState, PersonalisationToPersonalisationState>();
serviceCollection.AddScoped<IPersonalisationService, PersonalisationBogusService>();
}
}