0

我只是怀疑这个小界面。

我有以下界面,这是用于注册一些项目以在每个模块中映射 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;
    }
 }

正如我所说,我不相信这是一个好主意和性能。也许我应该在映射字典的容器中注册一个实例,你怎么看?

4

0 回答 0