Mam w projekcie dotnet core 2.1 coś takiego w uproszczonej wersji:
public class CreateVehicle
{
public string Brand { get; set; }
public string Model { get; set; }
...
}
public class CreateVehicleValidator : AbstractValidator<CreateVehicle>
{
public CreateVehicleValidator()
{
RuleFor(vehicle => vehicle.Brand).NotNull();
RuleFor(vehicle => vehicle.Model).NotNull();
...
}
}
- Chcę zamiast domyślnego DI użyć Autofac'a. Czy wersja 1 działa dokładnie tak jak wersja 2? Jeśli tak to, która jest "lepsza" czy może jeszcze inaczej powinno się to zrobić?
public class ValidationsModule : Module
{
protected override void Load(ContainerBuilder builder)
{
// wersja 1
builder.RegisterAssemblyTypes(ThisAssembly)
.AsClosedTypesOf(typeof(IValidator<>))
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
// wersja 2
builder.RegisterAssemblyTypes(ThisAssembly)
.Where(t => t.Name.EndsWith("Validator"))
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
}
}
-
Podobne pytanie do pierwszego czy jest różnica pomiędzy (Autofac)
.Where(t => t.IsAssignableTo<IService>())
a.AssignableTo<IService>()
-
Szukałem w internecie jak połączyć Autofac'a z FluentValidator i w każdym przypadku było coś a'la
ValidationFactory
. Rejestrując typy jak wyżej wszystko działało czy jest sens pisać fabrykę do walidacji? -
ApiController wygląda mniej więcej tak:
[HttpPost]
public async Task<IActionResult> Post([FromBody] CreateVehicle request)
{
if (!ModelState.IsValid)
return BadRequest();
await _vehicleService.CreateVehicle(request);
return Created(...);
}
Czy w controllerze, może/powinno się sprawdzać ModelState czy lepiej przenieść to do serwisu? Tylko w serwisie jak uzyskać dostęp do ModelState?
-
CreateVehicle
przechowuję w Core czyCreateVehicleValidator
też powinien być w Core czy może przenieść do Infrastructure, żeby nie dodawać zależności od FluentValidator do Core? -
Już ściśle nie związane z tematem mam Controller i ApiController i chcę w zależności od klienta żeby serwis zwrócił albo ViewModel - RazorView albo Dto - Api. Jest jakiś dobry sposób, żeby to zaimplementować bo mapowanie w Controllerze jest chyba złe i powoduje wyciek z domeny. Jakiś pośredni serwis generyczny który w zależności od klienta będzie mappował wynik na odpowiedni typ?
AenyatiaStartup.cs
i zrobił się syf, teraz wszystko refaktoryzuję i rozdzielam w moduły