IdentityAccessors
Identity accessor provides schema specific services:
- Construct and deconstruct IIdentity and native typed identity instances.
- Print identities in schema's format
- Parse identity from schema's format
- Serialize identities
- Deserialize identities
IIdentityAccessor is the interface for identity accessors.
/// <summary>Identity accessor</summary>
public interface IIdentityAccessor : IConstructorAccessor<IIdentity>, IDeconstructorAccessor<IIdentity>
{
/// <summary>Identity schema identifier.</summary>
Label8 Name { get; set; }
/// <summary>Memory accessors</summary>
IPrintSerialization<IIdentity> MemoryAccessors { get; set; }
}
/// <summary>Identity accessor of native type <typeparamref name="T"/></summary>
/// <typeparam name="T">Native type of the identity, for type name <see cref="System.Type"/>.</typeparam>
public interface IIdentityAccessor<T> : IIdentityAccessor, IConstructorAccessor<IIdentity, T>, IDeconstructorAccessor<IIdentity, T>
{
}
/// <summary></summary>
public interface IIdentityAccessorVisitor : IAccessorVisitor
{
/// <summary></summary>
bool VisitIdentityAccessor(IIdentityAccessor identityAccessor);
/// <summary></summary>
bool VisitIdentityAccessor<T>(IIdentityAccessor identityAccessor);
}
IdentityAccessors contains accessor implementations.
IIdentityAccessor<Type> identityAccessor = IdentityAccessors.Default.TypeName;
Name | Description |
---|---|
TypeName | .NET type-name identity schema, with fully qualified assembly name. |
TypeNameWithoutAssembly | .NET type-name identity schema, without fully qualified assembly name. |
Extension methods are available in following namespaces.
using Avalanche.Identity;
using Avalanche.Serialization;
using Avalanche.Utilities;
Construct
Identity accessor can construct identity from native instance.
IIdentity identity = identityAccessor.Create(typeof(String));
Identity accessor can deconstruct identity into native instance.
Type type = identityAccessor.Deconstruct(identity);
Print and Parse
Identity accessor can print identity into schema specific format.
// Get accessor
IIdentityAccessor<Type> identityAccessor = IdentityAccessors.Default.TypeName;
// Create identity
IIdentity identity = identityAccessor.Create(typeof(String));
// Print ""
string typename = identityAccessor.MemoryAccessors.Print(identity);
Identity accessor can parse schema specific string into identity.
// Get accessor
IIdentityAccessor<Type> identityAccessor = IdentityAccessors.Default.TypeName;
// Parse
IIdentity identity = identityAccessor.MemoryAccessors.Parse("System.String");
Parsing may require a serialization context.
// Create serialization context
IServiceProvider serializationContext = new DictionaryServiceProvider()
{
{ typeof(IDictionary<Label8, ILabelAccessor>), LabelAccessors.Default },
{ typeof(IDictionary<Label8, IIdentityAccessor>), IdentityAccessors.Default }
};
// Parse
IIdentity identity = identityAccessor.MemoryAccessors.Parse(text, serializationContext);
Serialization
MemoryAccessors.Serialize serializes into byte[].
// Create identity
IIdentity identity = identityAccessor.Create(typeof(String));
// Serialize
byte[] data = identityAccessor.MemoryAccessors.Serialize(identity);
Deserialization requires context.
// Create serialization context
IServiceProvider serializationContext = new DictionaryServiceProvider()
{
{ typeof(IDictionary<Label8, ILabelAccessor>), LabelAccessors.Default },
{ typeof(IDictionary<Label8, IIdentityAccessor>), IdentityAccessors.Default }
};
MemoryAccessors.Deserialize serializes from byte[].
// Deserialize
IIdentity id = identityAccessor.MemoryAccessors.Deserialize(data, serializationContext);
Full Example
Full example
using System;
using System.Collections.Generic;
using Avalanche.Accessor;
// <00>
using Avalanche.Identity;
using Avalanche.Serialization;
using Avalanche.Utilities;
// </00>
public class identityaccessors
{
public static void Run()
{
{
// <01>
IIdentityAccessor<Type> identityAccessor = IdentityAccessors.Default.TypeName;
// </01>
}
{
IIdentityAccessor<Type> identityAccessor = IdentityAccessors.Default.TypeName;
// <21>
IIdentity identity = identityAccessor.Create(typeof(String));
// </21>
// <22>
Type type = identityAccessor.Deconstruct(identity);
// </22>
}
{
// <31>
// Get accessor
IIdentityAccessor<Type> identityAccessor = IdentityAccessors.Default.TypeName;
// Create identity
IIdentity identity = identityAccessor.Create(typeof(String));
// Print ""
string typename = identityAccessor.MemoryAccessors.Print(identity);
// </31>
}
{
// <32>
// Get accessor
IIdentityAccessor<Type> identityAccessor = IdentityAccessors.Default.TypeName;
// Parse
IIdentity identity = identityAccessor.MemoryAccessors.Parse("System.String");
// </32>
}
{
// Get accessor
IIdentityAccessor<Type> identityAccessor = IdentityAccessors.Default.TypeName;
//
string text = "System.String";
// <33>
// Create serialization context
IServiceProvider serializationContext = new DictionaryServiceProvider()
{
{ typeof(IDictionary<Label8, ILabelAccessor>), LabelAccessors.Default },
{ typeof(IDictionary<Label8, IIdentityAccessor>), IdentityAccessors.Default }
};
// Parse
IIdentity identity = identityAccessor.MemoryAccessors.Parse(text, serializationContext);
// </33>
}
{
// Get accessor
IIdentityAccessor<Type> identityAccessor = IdentityAccessors.Default.TypeName;
// <41>
// Create identity
IIdentity identity = identityAccessor.Create(typeof(String));
// Serialize
byte[] data = identityAccessor.MemoryAccessors.Serialize(identity);
// </41>
// <42>
// Create serialization context
IServiceProvider serializationContext = new DictionaryServiceProvider()
{
{ typeof(IDictionary<Label8, ILabelAccessor>), LabelAccessors.Default },
{ typeof(IDictionary<Label8, IIdentityAccessor>), IdentityAccessors.Default }
};
// </42>
// <43>
// Deserialize
IIdentity id = identityAccessor.MemoryAccessors.Deserialize(data, serializationContext);
// </43>
}
}
}