2

私は、役割が単純なカスタム マークアップ拡張機能に取り組んでいます。

拡張コンストラクター パラメーター (型) で System.Activator を使用し、インスタンス化します。

 public class MyExtension : MarkupExtension
 {
    private readonly Type _myType;

    public MyExtension (Type param)
    {
        _myType= param;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Activator.CreateInstance(_myType);
    }
 }

ランタイム中、この拡張機能は期待どおりに機能します。

ただし、設計時には、型をアクティブ化するときに例外がスローされます。

ソースを見つけるためにドリルダウンし、クジラを捕まえました。

    try
    {
        return Activator.CreateInstance(_myType);
    }
    catch (TypeInitializationException ex)
    {

    }

だから私はこれをループしました:

 (ex.InnerException as ReflectionTypeLoadException).LoaderExceptions[i].Message);

そして、次のメッセージを取得しました

Windows ランタイム タイプ 'Windows.ApplicationModel.Core.IFrameworkView' が見つかりませんでした。

Windows ランタイム タイプ 'Windows.ApplicationModel.Core.IFrameworkViewSource' が見つかりませんでした。

私のコードは実行時に正常に動作するため、私の唯一の推測は、VS (.NET 4.5.1 の 2013 update 2)

または、Xaml デザイナーが間違ったアセンブリを探しているだけです。

これを修正する方法についてのアイデア、またはこの問題に対する他の見解はありますか?

お時間を割いていただき、誠にありがとうございました。

4

1 に答える 1

0

この問題をさらに調査した結果、次の結論に達しました。

この問題の唯一の解決策は、設計時の戻り値と実行時の戻り値を区別することです。

これはかなり簡単に実行でき、私が開発中の WPF フレームワークに実装されています。

PerrypheralFrameworkを参照してください

関連するアセンブリは PerrypheralFramework.WPF です。関連するクラスは次のとおりです: PerrypheralFramework.WPF.MarkupExtensions.Base.DependencyObjectDependantExtensionBase

于 2014-12-09T09:35:54.403 に答える