자동 완성기를 사용하여 생성 된 객체의 생성자에 asp.net 코어 DI 컨테이너의 서비스를 주입해야하는 시나리오에 직면하고 있습니다. ..net core di 컨테이너에서 오토메이터로 생성 된 새로운 객체에 서비스를 전달하는 방법
이것이 최선의 방법인지는 모르겠지만 내가 성취하려는 것을 설명해 드리겠습니다.
모델 매개 변수, 단지 POCO를받는 asp.net 코어 mvc 컨트롤러가 있는데, 그 모델은 내가 원하는 클래스 개체에서 비즈니스 로직, 데이터 액세스 등을 포함하는 ViewModel 클래스로 변환해야합니다. 주입 된 서비스에서 정보를 얻으려면 문제가있는 부분인데, 컨트롤러에서 최종 ViewModel으로 서비스를 주입하는 방법을 알아낼 수 없습니다.
내 코드는 다음과 같습니다.
NewGameModel.cs
namespace MyProject.Shared.Models
{
public class NewGameModel
{
public List<PlayerModel> Players { get; set; }
public bool IsValid => Players.Any();
public NewGameModel()
{
Players = new List<PlayerModel>();
}
}
}
NewGameViewModel.cs
namespace MyProject.Core.ViewModels
{
public class NewGameViewModel
{
private Guid Token = Guid.NewGuid();
private DateTime DateTimeStarted = DateTime.Now;
private readonly IConfiguration _configuration;
public List<PlayerModel> Players { get; set; }
public NewGameViewModel(IConfiguration config)
{
_configuration = config;
}
public string DoSomething()
{
//Do something using _configuration
//Business Logic, Data Access etc
}
}
}
MapperProfile.cs
namespace MyProject.Service
{
public class MapperProfile : Profile
{
public MapperProfile()
{
CreateMap<NewGameModel, NewGameViewModel>();
}
}
}
ASP.NET 핵심 프로젝트 - Startup.cs
namespace MyProject.Service
{
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton(Configuration);
var autoMapperConfig = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new MapperProfile());
});
var mapper = autoMapperConfig.CreateMapper();
services.AddSingleton(mapper);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
}
}
ASP.NET 핵심 프로젝트 - GameController.cs
namespace MyProject.Service.Controllers
{
[Route("api/[controller]")]
public class GameController : Controller
{
private readonly IConfiguration _configuration;
private readonly IMapper _mapper;
public GameController(IConfiguration config, IMapper mapper)
{
_configuration = config;
_mapper = mapper;
}
[HttpPost]
public IActionResult CreateNewGame([FromBody]NewGameModel model)
{
if (!model.IsValid) return BadRequest();
//Throws error because no constructor parameter was passed
//How to pass the IConfiguration to the destination NewGameViewModel object?
var viewModel = _mapper.Map<NewGameModel, NewGameViewModel>(model);
var result = viewModel.DoSomething();
return CreatedAtRoute("GetGame", new { token = result.GameToken }, result);
}
}
}
내가 가지고 당신의 도움이
까지의 한 줄로 구성됩니다. https://stackoverflow.com/questions/7192275/how-to-use-automapper-to-construct-object-without-default-constructor – Nkosi
여전히 프로필로 구성을 가져 오는 방법을 알아 내려고 노력하고 있습니다. – Nkosi
다음은 다른 것입니다. one https://stackoverflow.com/questions/2239143/automapper-how-to-map-to-constructor-parameters-instead-of-property-setters#2239647 – Nkosi