C# PCL中的xamarin securestring等效项
SecureString对PCL不友好。我知道这个问题可以通过依赖项注入解决,但我不想这样做,而是希望在PCL中使用与SecureString等效的东西C# PCL中的xamarin securestring等效项,c#,xamarin,dependency-injection,portable-class-library,securestring,C#,Xamarin,Dependency Injection,Portable Class Library,Securestring,SecureString对PCL不友好。我知道这个问题可以通过依赖项注入解决,但我不想这样做,而是希望在PCL中使用与SecureString等效的东西 但到目前为止,我找不到任何其他类或框架。System.Security.在任何可移植类库配置文件中都不存在。您可能会在一些更高版本的.NET标准中发现这一点,这些标准提供了更大的.NET子集 如果您坚持使用PCL,那么最好的选择是使用诸如PCLCrypto之类的库,或者在每个平台上滚动您自己的代码,并在运行时注入这些代码。您可以使用所谓的 在这
但到目前为止,我找不到任何其他类或框架。
System.Security.
在任何可移植类库配置文件中都不存在。您可能会在一些更高版本的.NET标准中发现这一点,这些标准提供了更大的.NET子集
如果您坚持使用PCL,那么最好的选择是使用诸如PCLCrypto之类的库,或者在每个平台上滚动您自己的代码,并在运行时注入这些代码。您可以使用所谓的
在这种情况下,这意味着您需要创建一个强名称PCL程序集,其中包含SecureString
的实现存根,包括您打算在应用程序中使用的SecureString
的方法和属性
例如:
namespace System.Security {
public class SecureString {
public SecureString() { }
public int Length { get; }
public void AppendChar(char c) { }
}
}
重要的是,您包含的属性和方法使用与原始类完全相同的签名,因为在使用此技巧时,您将依赖于签名等价性。另一方面,您不需要提供有效的实现,因为这将由每个相应平台上的内置SecureString
处理
接下来,您需要为每个平台创建一个与PCL程序集具有相同强名称的程序集,只需包含指向SecureString
的类型转发指令:
[assembly: TypeForwardedTo(typeof(SecureString))]
这取决于这样一个事实,即即使没有PCL配置文件定义SecureString
,每个平台都会定义。因此,您在特定于平台的DLL中实际要做的是指出您希望用来代替PCL声明的SecureString
的实现
PCL和特定于平台的程序集就位后,假设它们都共享相同的名称(例如securestring.dll)并使用相同的密钥签名,现在可以在实现中使用securestring
例如,假设您有一个PCL程序集foo.Core.dll,该程序集由平台特定的应用程序foo.Windows.dll、foo.Android.dll和foo.iOS.dll使用,其中foo.Core.dll使用SecureString
。然后,您应该这样组织您的解决方案:
- foo.Core.dll应引用securestring.dll的PCL版本
- foo.Windows.dll应参考foo.Core.dll和securestring.dll的Windows版本
- foo.Android.dll应参考foo.Core.dll和安卓版本的securestring.dll
- foo.iOS.dll应参考foo.Core.dll和securestring.dll的iOS版本