【发布时间】:2011-08-30 17:59:23
【问题描述】:
目前,我正在使用 MEF 开发 Visual Studio 2010 的扩展,我需要初始化我的全局状态。我正在尝试在 Package.Initialize 方法中做到这一点
[PackageRegistration(UseManagedResourcesOnly = true)]
[InstalledProductRegistration("#110", "#112", "1.0.0.0", IconResourceID = 400)]
[Guid("1AF4B41B-F2DF-4F49-965A-816A103ADFEF")]
public sealed class MyPackage : Package
{
protected override void Initialize()
{
ContainerConfigurator.Configure();
ContainerConfigurator.IsInitialized = true;
base.Initialize();
}
}
我还有一个使用此状态的 MEF 分类器提供程序
[Export(typeof(IClassifierProvider))]
[Name("This is my provider")]
[ContentType("DebugOutput")]
[ContentType("Output")]
public class MyClassifierProvider : IClassifierProvider
{
[Import]
private IClassificationTypeRegistryService _classificationRegistry = null; // MEF
public IClassifier GetClassifier(ITextBuffer textBuffer)
{
// This always false
if (!ContainerConfigurator.IsInitialized)
throw new InvalidOperationException();
return textBuffer.Properties.GetOrCreateSingletonProperty(() => new TypedClassifier(ServiceLocator.Current, _classificationRegistry));
}
}
包和 MEF 分类器都在同一个程序集中。当我开始调试并放置断点时,我看到该程序集已加载。但是 MyClassifierProvider 在 MyPackage.Initialize 调用之前已经被初始化。所以我无法在任何 MEF 组件启动之前初始化我的全局状态。谁能解释为什么以及如何避免这种行为?
谢谢
【问题讨论】:
标签: c# visual-studio-2010 mef