我有核心,其中接口被声明为
public interface IRequestProvider
{
int SomeId { get; set; }
}
实现也在同一层定义
然后我有另一个层 Repo 层,我在其中调用另一个名为 DataAccess 层的外部 nuget 包
我在其中宣布
public interface IRequestProvider
{
int SomeId { get; set; }
int SomeOtherId { get; set; }
}
所以在核心和数据访问这两个层我都定义了 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();
}
}
作用域用于在整个请求中传递相同的实例
自动映射器已启用
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() 时自动反映更改