2011-08-30 17 views
9

Hata ayıklama sırasında yöntem başlatılmıyor Şu anda, Visual Studio 2010'a MEF kullanarak bir uzantı geliştiriyorum ve global durumumu başlatmam gerekiyor. Ben Visual Studio Paketi

[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(); 
    } 
} 

Ayrıca ben

[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)); 
    } 
} 

Hem paketin ve MEF sınıflandırıcı aynı mecliste olan bu durumu kullanan bir MEF sınıflandırıcı sağlayıcısı Package.Initialize yönteminde bunu yapmaya çalışıyorum. Hata ayıklamaya başladığımda ve bir kesme noktası yerleştirdiğimde, bu paketin yüklü olduğunu görüyorum. Ama MyClassifierProvider MyPackage.Initialize çağrısından önce başlatıldı. Bu yüzden MEF bileşenlerinin başlatılmasından önce global durumumu başlatamıyorum. Herkes bu davranışı niçin ve nasıl önleyebilirim?

Teşekkürler

cevap

19

Cevabı bulduk. ProvideAutoLoad yardım, bu VSConstants bağlantılar,

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vsconstants(v=vs.80).aspx

http://dotneteers.net/blogs/divedeeper/archive/2008/03/23/LVNSideBar1.aspx

böylece nihai sınıf bildirimi

[PackageRegistration(UseManagedResourcesOnly = true)] 
[InstalledProductRegistration("#110", "#112", "1.0.0.0", IconResourceID = 400)] 
[Guid("1AF4B41B-F2DF-4F49-965A-816A103ADFEF")] 
[ProvideAutoLoad("ADFC4E64-0397-11D1-9F4E-00A0C911004F")] 
public sealed class MyPackage : Package 
+1

ilk bağlantı yanlış olduğunu ProvideAutoLoad öznitelik eklemek gerekir Burada bulunan: http://msdn.microsoft.com/en-us/library/Microsoft.VisualStudio.Shell.ProvideAutoLoadAttribute.aspx –

+0

'ProvideAutoLoad' özniteliği hala geçerli (en azından VS 2015 için) – CrazyIvan1974