Actualmente, estoy desarrollando una extensión para Visual Studio 2010 usando MEF y necesito inicializar mi estado global. Estoy tratando de hacerlo en el método Package.InitializeEl método Visual Studio Package Initialize no llama al depurar
[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();
}
}
También tengo un proveedor clasificador MEF que utiliza este estado
[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));
}
}
Ambos paquete y clasificador MEF están en el mismo conjunto. Cuando empiezo a depurar y coloco un punto de interrupción, veo que esta assemly está cargada. Pero MyClassifierProvider se ha inicializado antes de MyPackage.Initialize call. Por lo tanto, no puedo inicializar mi estado global antes de que se inicie alguno de los componentes de MEF. ¿Alguien puede explicar por qué y cómo puedo evitar ese comportamiento?
Gracias
El primer enlace es incorrecto, se une a VSConstants, la ayuda ProvideAutoLoad es encontrado aquí: http://msdn.microsoft.com/en-us/library/Microsoft.VisualStudio.Shell.ProvideAutoLoadAttribute.aspx –
atributo 'ProvideAutoLoad' sigue siendo válido (al menos para VS 2015) – CrazyIvan1974