feat(UriBuilderResolver): add to be able to dependencies.

- add UriBuilderFactory confoguration
 - inejct UriBuilderResolver as transient
This commit is contained in:
tekh 2025-08-03 12:25:39 +02:00
parent bdc773d8ed
commit 91679180ec
3 changed files with 38 additions and 16 deletions

View File

@ -1,4 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
using WorkFlow.Application.Mapping;
namespace WorkFlow.Application;
@ -16,11 +17,16 @@ public static class DependencyInjection
cfg.LicenseKey = diOptions.MediatRLicense;
});
services.AddSingleton(diOptions.UriBuilderFactory());
services.AddTransient<UriBuilderResolver>();
return services;
}
public class WorkFlowServiceOptions
{
public string MediatRLicense { get; set; } = string.Empty;
public Func<UriBuilder> UriBuilderFactory { get; set; } = () => new UriBuilder();
}
}

View File

@ -1,40 +1,34 @@
using System.Web;
using WorkFlow.Application.Buttons;
using WorkFlow.Application.Buttons;
using WorkFlow.Application.Dto;
using WorkFlow.Domain.Entities;
namespace WorkFlow.Application;
namespace WorkFlow.Application.Mapping;
public class MappingProfile : AutoMapper.Profile
{
public MappingProfile()
{
// Mapping entity to DTO
CreateMap<Config, ConfigDto>();
CreateMap<Profile, ProfileDto>();
CreateMap<PControlsTF, PControlsTFDto>();
CreateMap<Button, ButtonDto>();
CreateMap<PObject, ObjectDto>()
.ForMember(dest => dest.Headlines, opt => opt.MapFrom(src => new[] { src.Headline1, src.Headline2 }))
.ForMember(dest => dest.Sublines, opt => opt.MapFrom(src => new[] { src.Subline1, src.Subline2 }));
CreateMap<PObjectState, ObjectStateDto>()
.ForMember(dest => dest.Intl, opt => opt.MapFrom(src => src.State1 != null ? src.State1.IntlState : null))
.ForMember(dest => dest.Others, opt => opt.MapFrom(src => new string?[] { src.State2, src.State3, src.State4 }));
CreateMap<PObjectStateHist, ObjectStateHistDto>()
.ForMember(dest => dest.Intl, opt => opt.MapFrom(src => src.State1 != null ? src.State1.IntlState : null))
.ForMember(dest => dest.Others, opt => opt.MapFrom(src => new string?[] { src.State2, src.State3, src.State4 }));
CreateMap<TfFile, TfFileDto>()
.ForMember(dest => dest.Url, opt => opt.MapFrom(src => UriBuilder.WithPath(src.Path, true)));
}
public static UriBuilder UriBuilder { get; set; } = new UriBuilder();
}
internal static class HttpUtilityExtensions
{
public static UriBuilder WithPath(this UriBuilder builder, string path, bool encode = true)
{
builder.Path = encode ? HttpUtility.UrlEncode(path) : path;
return builder;
.ForMember(dest => dest.Url, opt => opt.MapFrom<UriBuilderResolver>());
}
}

View File

@ -0,0 +1,22 @@
using AutoMapper;
using System.Web;
using WorkFlow.Application.Dto;
using WorkFlow.Domain.Entities;
namespace WorkFlow.Application.Mapping;
public class UriBuilderResolver : IValueResolver<TfFile, TfFileDto, UriBuilder>
{
private readonly UriBuilder _uriBuilder;
public UriBuilderResolver(UriBuilder uriBuilder) => _uriBuilder = uriBuilder;
public UriBuilder Resolve(TfFile source, TfFileDto destination, UriBuilder destMember, ResolutionContext context)
{
var builder = new UriBuilder(_uriBuilder.Uri)
{
Path = HttpUtility.UrlEncode(source.Path)
};
return builder;
}
}