使用UnityContainer解析字典

时间:2012-07-06 04:24:37

标签: c# prism unity-container containers

我只是怀疑这个小界面。

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

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

0 个答案:

没有答案