我只是怀疑这个小界面。
我有以下界面,这是用于注册一些项目以在每个模块中映射 itemsViewModel。所以每个模块都会注册一些键。
public interface IExerciseMap
{
Dictionary<Type, Func<BaseItem, BaseItemViewModel>> Maps { get; }
void AddExercise(Type type, Func<BaseItem, BaseItemViewModel> func);
}
public class ExerciseMap : IExerciseMap
{
public Dictionary<Type, Func<BaseItem, BaseItemViewModel>> maps;
public void AddExercise(Type type, Func<BaseItem,BaseItemViewModel> func)
{
maps.Add(type, func);
}
public Dictionary<Type, Func<BaseItem, BaseItemViewModel>> Maps
{
get
{
if (maps == null)
maps = new Dictionary<Type, Func<BaseItem, BaseItemViewModel>>();
return maps;
}
}
}
到目前为止,我已经在其中实现了一个字典,我认为这不是最好的性能。好的,让我跟着解释你的场景。
我已经配置好了。。
protected override void ConfigureContainer()
{
base.ConfigureContainer();
...
Container.RegisterType<IExerciseMap, ExerciseMap>();
}
这是其中一个模块的 ModuleInit 示例。
public ModuleInit(IUnityContainer container, IRegionManager regionManager,
IExerciseMap maps)
{
...
_maps = maps;
}
public void Initialize()
{
// Add types to the mapping (this is right, no changes)
_maps.Add(typeof(..), Func<...>);
_maps.Add(typeof(..), Func<...>);
...
}
在这里,我从对象传递值(在构造函数中映射)。
public class WorksheetViewModel : NotificationObject
{
private readonly Dictionary<Type, Func<BaseItem, BaseItemViewModel>> maps;
public WorksheetViewModel(..., Dictionary<Type, Func<BaseItem, BaseItemViewModel>> maps)
{
...
this.maps = maps;
}
}
正如我所说,我不相信这是一个好主意和性能。也许我应该在映射字典的容器中注册一个实例,你怎么看?