C# AutoMapper没有';使用Caliburn.Micro时,在设计时不工作 背景
我正在使用WPF和Caliburn.Micro为现有CLI应用程序构建用户界面。由于提供了大量DTO对象,我使用AutoMapper将数据传递给支持PropertyChanged通知的模型(使用Caliburn.Micro中的PropertyChangedBase) 我在方法内部设置AutoMapper,如下所示:C# AutoMapper没有';使用Caliburn.Micro时,在设计时不工作 背景,c#,automapper,caliburn.micro,design-time,C#,Automapper,Caliburn.micro,Design Time,我正在使用WPF和Caliburn.Micro为现有CLI应用程序构建用户界面。由于提供了大量DTO对象,我使用AutoMapper将数据传递给支持PropertyChanged通知的模型(使用Caliburn.Micro中的PropertyChangedBase) 我在方法内部设置AutoMapper,如下所示: Mapper.Initialize( config => config.CreateMap<ModelA, ModelB>() ); 当您更改ViewMo
Mapper.Initialize(
config => config.CreateMap<ModelA, ModelB>()
);
当您更改ViewModel中的任何值时,更改不会投影到设计器中,并且在您最后运行应用程序后,设计器会抛出错误(图像)并停止渲染,但一切都在运行时工作
形象
如何复制
我还没有完全解决设计时的问题,但是切换到基于实例的AutoMapper配置解决了这个异常
protected override void Configure() {
container = new SimpleContainer();
container.Singleton<IWindowManager, WindowManager>();
container.Singleton<IEventAggregator, EventAggregator>();
container.PerRequest<IShell, ShellViewModel>();
MapperConfiguration config = new MapperConfiguration(cfg => {
cfg.CreateMap<Core.ProjectDto, Models.Panel.Project>();
});
container.RegisterInstance(
typeof(IMapper),
"automapper",
config.CreateMapper()
);
}
受保护的覆盖无效配置(){
容器=新的SimpleContainer();
container.Singleton();
container.Singleton();
container.PerRequest();
MapperConfiguration配置=新的MapperConfiguration(cfg=>{
CreateMap();
});
容器.RegisterInstance(
类型(IMapper),
“汽车制造商”,
config.CreateMapper()
);
}
这是因为AM未初始化。在这种情况下,CreateMissingTypeMaps的默认值为true,因此它为您创建了一个映射,但该默认映射无法工作,因为无法映射IsNotifying。感谢您的评论,这实际上是有意义的。你知道我应该在哪里初始化AutoMapper,这样它就可以在设计时工作了吗?我曾尝试在方法内部初始化它,但没有成功。我不知道这一点,但您可以做的是转移到基于实例的API。然后您可以注入IMapper,或者使用Lazy手动执行。
xmlns:vm="clr-namespace:CaliburnAutoMapperBug.ViewModels"
xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=vm:ShellViewModel, IsDesignTimeCreatable=True}"
cal:Bind.AtDesignTime="True">
protected override void Configure() {
container = new SimpleContainer();
container.Singleton<IWindowManager, WindowManager>();
container.Singleton<IEventAggregator, EventAggregator>();
container.PerRequest<IShell, ShellViewModel>();
MapperConfiguration config = new MapperConfiguration(cfg => {
cfg.CreateMap<Core.ProjectDto, Models.Panel.Project>();
});
container.RegisterInstance(
typeof(IMapper),
"automapper",
config.CreateMapper()
);
}