从带有鸡尾酒的Caliburn Micro迁移到裸露的Caliburn Micro

时间:2014-11-21 09:09:24

标签: c# wpf caliburn.micro

土豆 我正在开发一个WPF项目,该项目过去曾使用IdeaBlade的Devforce with Cocktail。我们现在重构了使用ServiceStack从实体框架数据访问Json / Ormlite的所有代码。 由于我们必须仅为IDialogManager和FrameworkBootstrapper引用Cocktail和Ideablade的程序集,因此我们实现了自己的 IDialogManager 以排除这些程序集。 我的问题是关于Bootstrapper如何创建实例。

我们使用MEF作为成分。

在代码的某些部分,我们使用PartFactory来创建实例......原始代码是

public abstract class PartFactoryBase<T> : IPartFactory<T>
{
    public T CreatePart()
    {
        return Composition.GetInstance<T>(CreationPolicy.NonShared);
    }
}

已被

取代
public abstract class PartFactoryBase<T> : IPartFactory<T>
{
    public T CreatePart()
    {
        var res = IoC.Get<T>();

        return res;
    }
}

但我们如何指定CreationPolicy?是由标记该类的CreationPolicyAttribute推断的吗?是否有更简洁的方法来创建新实例?

我们创建实例的代码的另一部分是单击menuitem时(在这种情况下创建一个屏幕)

旧代码:

public void Handle(MenuMessage message)
    {
        typeSpecific = message.MenuItemType;

        IScreen screen = (Screen)Composition.GetInstance(typeSpecific, string.Empty, CreationPolicy.NonShared);
        [...]
    }

新版本:

    public void Handle(MenuMessage message)
    {
        typeSpecific = message.MenuItemType;

        IScreen screen = null;

        var contract =  AttributedModelServices.GetContractName(typeSpecific);
        var exports = DOMEBootStrapper.Container.GetExportedValues<object>(contract);
        if (exports.Any())
            screen =(Screen) exports.First();
        [...]
    }

我不想完全放置这些代码,因为当我需要创建实例时,我在Bootstrapper中定义了相同的内容......我如何指定创建策略?

提前致谢

0 个答案:

没有答案