小编Ale*_*lex的帖子

调试时Visual Studio包Initialize方法不调用

目前,我正在使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个使用此状态的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));
    }
}
Run Code Online (Sandbox Code Playgroud)

包和MEF分类器都在同一个程序集中.当我开始调试并放置一个断点时,我看到这个组件被加载了.但MyClassifierProvider已在MyPackage.Initialize调用之前初始化.因此,在启动任何MEF组件之前,我无法初始化我的全局状态.任何人都可以解释为什么以及如何避免这种行为?

谢谢

c# mef visual-studio-2010

9
推荐指数
1
解决办法
2739
查看次数

显式转换运算符应用于通过反射创建的实例

当发现以下代码在运行时抛出异常时,我感到很惊讶:

class A
{
    public string Name { get; set; }

    public A()
    {
        Name = "Class A";
    }
}

class B
{
    public string Name { get; set; }

    public B()
    {
        Name = "Class B";
    }

    public static explicit operator A(B source)
    {
        return new A() {Name = source.Name};
    }
}


class Program
{
    static void Main(string[] args)
    {
        // This executes with no error
        var bInstance = new B();
        Console.WriteLine(bInstance.GetType()); // <assemblyname>.B
        var aInstance = (A) bInstance; …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection casting explicit-conversion

4
推荐指数
1
解决办法
483
查看次数