如何映射两个不同的接口,以便一个接口值自动更改,另一个应该得到反映

How to map two different Interface such that one Interface value get change automatically other should get reflected

我有核心,其中接口声明为

    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();

        }
    }

范围内用于在整个请求中传递相同的实例

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() 的情况下自动反映更改

IRequestProvider 的实现中让 属性 setter 为您调用映射器如何? 属性 getter 和 setters 可以用来做比设置私有支持字段更多的事情。一个例子:

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();
        }
    }
}