土豆 我正在开发一个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中定义了相同的内容......我如何指定创建策略?
提前致谢