![](/img/trans.png)
[英]InternalsVisibleTo - How do you prevent someone from creating an assembly with same name and get access to internal classes or methods?
[英]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 編輯器抱怨拋出一些錯誤但運行良好。
這似乎只是 VS XAML 編輯器的一個限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.