簡體   English   中英

如何使用“InternalsVisibleTo”從 XAML 訪問另一個程序集中的內部類轉換器

[英]How to access to Internal class converter in another assembly from XAML with "InternalsVisibleTo"

我有類似這個轉換器的東西,不同之處在於類是內部的,為了安全起見,轉換器屬於另一個程序集(MyAssembly.dll):

namespace MyAssembly.InAnotherNameSpace
{
    internal class ValueConvertor : IValueConverter
        {        
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                ...
            }

            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                ....
            }
        }
}

我使用InternalsVisibleToAttribute從 WPF 項目訪問轉換器:

....
xmlns:c="clr-namespace:MyAssembly.InAnotherNameSpace;assembly=MyAssembly"
....
 <UserControl.Resources>
        <ResourceDictionary>
            <c:ValueConvertor x:Key="valueConvertor"/>
        </ResourceDictionary>
    </UserControl.Resources>

我在 XAML 中遇到問題,無法將類識別為內部類,並且 Visual Studio 顯示此錯誤:

Only public or internal classes can be used within markup. 'ValueConvertor' type is not public or internal. 

按照這個回答線程,InternalsVisibleTo 不能在 XAML 中工作,這是真的嗎?

您可以應用一種解決方法 - 在控制代碼隱藏中創建轉換器並從 XAML 標記中使用它:

public partial class View : UserControl
{
    public static readonly IValueConverter valueConvertor = new MyAssembly.InAnotherNameSpace.ValueConvertor();

    public View()
    {
        InitializeComponent();
    }
}

<TextBlock Text="{Binding Something, Converter={x:Static local:View.valueConvertor}}"/>

您可以使用 InternalsVisibleTo() 在另一個程序集中使用內部類。 用 VS2019 和 .net 4.7.2 確認。

VS2019 XAML 編輯器抱怨拋出一些錯誤但運行良好。

  • XDG0009 - 類型“UserControl1”不可訪問。)
  • XLS0419 - 未定義的 CLR 命名空間。 “clr-namespace” URI 指的是無法找到的命名空間“WpfControlLibrary2”

這似乎只是 VS XAML 編輯器的一個限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM