嗨,我正在使用 unity 作为我的 ioc 容器,我有一个案例,我需要为特定案例使用一个实现,而对于其他案例,我需要使用另一个实现。
这是我的界面:
public interface IMappingService<TFrom , TTo>
{
TTo Map(TFrom source);
}
这是我的两个实现:
public class AutoMapperService<TFrom, TTo> : IMappingService<TFrom, TTo>
{
public TTo Map(TFrom source)
{
TTo target = Mapper.Map<TTo>(source);
this.AfterMap(source, target);
return target;
}
protected virtual void AfterMap(TFrom source, TTo target)
{
}
}
public class AutoMapperGetUpcomingLessonsService : AutoMapperService<GetUpcomingLessons_Result, UpcomingLessonDTO>
{
private readonly IOfficialNamesFormatter m_OfficialNamesFormatter;
public AutoMapperGetUpcomingLessonsService(IOfficialNamesFormatter officialNamesFormatter)
{
m_OfficialNamesFormatter = officialNamesFormatter;
}
protected override void AfterMap(GetUpcomingLessons_Result source, UpcomingLessonDTO target)
{
target.TeacherOfficialName = m_OfficialNamesFormatter.GetOfficialName(target.TeacherGender,
target.TeacherMiddleName,
target.TeacherLastName);
}
}
我使用 IServiceLocator 在我的代码中访问实现:
ServiceLocator.GetInstance<IMappingService<IEnumerable<GetUpcomingLessons_Result>, IEnumerable<UpcomingLessonDTO>>>();
在大多数情况下,我想使用 AutoMapperService 实现,为此我在我的dependencyConfig文件中指定了这个:
container.RegisterType(typeof(IMappingService<,>), typeof(AutoMapperService<,>));
当我想使用 AutoMapperGetUpcomingLessonsService 作为我的实现时出现问题。我尝试添加这个:
container.RegisterType<IMappingService<GetUpcomingLessons_Result, UpcomingLessonDTO>, AutoMapperGetUpcomingLessonsService>();
但似乎没有达到代码。我该如何解决这个问题?