Как отобразить два разных интерфейса так, чтобы одно значение интерфейса автоматически изменялось, а другое отражалось
У меня есть Core, в котором интерфейс объявлен как
public interface IRequestProvider
{
int SomeId { get; set; }
}
Реализацию также определяют в том же слое
и затем у меня есть другой слой Repo layer, в котором я вызываю другой внешний пакет nuget, называемый DataAccess layer
в котором я объявил
public interface IRequestProvider
{
int SomeId { get; set; }
int SomeOtherId { get; set; }
}
так в core и DataAccess оба слоя я определил IRequestProvider
Ламарский код
public static class SomeRegistry
{
public static void RegisterDISome(this ServiceRegistry services, IConfigurationRoot configurationRoot)
{
services.For<IRequestProvider>().Use<RequestProvider>().Scoped();
services.For<DataAccessInterfaces.IRequestProvider>().Use<DataAccessModel.RequestProvider>().Scoped();
}
}
Использование Scoped для передачи одного и того же экземпляра в запросе
Automapper включен
public class DomainToRepoMappingsProfile : Profile
{
public DomainToRepoMappingsProfile()
{
this.CreateMap<IRequestProvider, DataAccess.IRequestProvider>()
.ForMember(dst => dst.SomeOtherId, opt => opt.Ignore());
}
}
Я ожидаю, что когда я изменю что-либо в Core.IRequestProvider из любого слоя, это должно автоматически отражаться в слое DataAccess.IRequestProvider.
В настоящее время я звоню IDomainToRepoMappingRequestProvider.map() каждый раз, чтобы установить DataAccess.IRequestProvider
public class DomainToRepoMappingRequestProvider : IDomainToRepoMappingRequestProvider
{
private readonly IMapper _mapper = null;
private readonly IRequestProvider _requestProvider = null;
private DataAccess.IRequestProvider _dataAccessRequestProvider = null;
public DomainToRepoMappingRequestProvider(IRequestProvider requestProvider, DataAccess.IRequestProvider dataAccessRequestProvider, IMapper mapper)
{
_mapper = mapper;
_requestProvider = requestProvider;
_dataAccessRequestProvider = dataAccessRequestProvider;
}
public void Map()
{
_mapper.Map(_requestProvider, _dataAccessRequestProvider);
}
}
Я нашел решение для автоматического отражения изменений, когда что-то меняется, без вызова map ()
1 ответ
Как насчет того, чтобы установить свойства в реализации IRequestProvider
позвонить в картограф для вас? Получатели и установщики свойств могут использоваться для гораздо большего, чем просто установка частного вспомогательного поля. Пример:
public class RequestProvider : IRequestProvider
{
private readonly _mappingProvider;
private int _someId;
public RequestProvider(IDomainToRepoMappingRequestProvider mappingProvider)
{
_mappingProvider = mappingProvider
}
public int SomeId
{
get;
set
{
_someId = value;
_mappingProvider.Map();
}
}
}