IRecordProviders
IRecordProviders holds record description and delegate providers (namespace Avalanche.Utilities.Record).
/// <summary>Provides record and field descriptions and delegates.</summary>
public interface IRecordProviders
{
/// <summary>Get record description for recordType.</summary>
IProvider<Type, IResult<IRecordDescription>> RecordDescription { get; set; }
/// <summary>Get all record delegates.</summary>
IProvider<Type, IResult<IRecordDelegates>> RecordDelegatesByType { get; set; }
/// <summary>Get all record delegates.</summary>
IProvider<IRecordDescription, IResult<IRecordDelegates>> RecordDelegates { get; set; }
/// <summary>Get <![CDATA[Func<object[], Record>]]> delegate.</summary>
IProvider<IRecordDescription, IResult<Delegate>> RecordCreate { get; set; }
/// <summary>Get all field delegates.</summary>
IProvider<IFieldDescription, IResult<IFieldDelegates>> FieldDelegates { get; set; }
/// <summary>Get specific field delegate.</summary>
IProvider<IFieldDescription, IResult<Delegate>> FieldRead { get; set; }
/// <summary>Get specific field delegate.</summary>
IProvider<IFieldDescription, IResult<Delegate>> FieldWrite { get; set; }
/// <summary>Get specific field delegate.</summary>
IProvider<IFieldDescription, IResult<Delegate>> RecreateWith { get; set; }
}
RecordProviders.RecordProviders.Create creates new providers. It doesn't use cache.
IRecordProviders recordDescriptionProvider = RecordProviders.Create;
RecordProviders.NewCached() creates new implementation with new cache of strong keyes and hash-equals comparer.
IRecordProviders recordDescriptionProvider = RecordProviders.NewCached();
RecordDescription.Cache uses cache with weak keys, and object reference comparer.
IRecordProviders recordDescriptionProvider = RecordProviders.Cached;
.RecordDescription[type] tries to get record description.
IRecordDescription recordDescription =
recordDescriptionProvider
.RecordDescription[typeof(MyClass)]
.AssertValue<IResult<IRecordDescription>, IRecordDescription>();
.RecordDelegates[recordDescription] tries to get record delegates.
IRecordDelegates recordDelegates =
recordDescriptionProvider
.RecordDelegates[recordDescription]
.AssertValue<IResult<IRecordDelegates>, IRecordDelegates>();
.RecordDelegateRecordDelegatesByType[type] tries to get record delegates with type.
IRecordDelegates recordDelegates2 =
recordDescriptionProvider
.RecordDelegatesByType[typeof(MyClass)]
.AssertValue<IResult<IRecordDelegates>, IRecordDelegates>();
.FieldDelegates[fielddescription] tries to create and cache field delegates.
IFieldDelegates fieldDelegates =
recordDescriptionProvider
.FieldDelegates[recordDescription.Fields[0]]
.AssertValue<IResult<IFieldDelegates>, IFieldDelegates>();
.GetFieldRead() tries to get field delegate for "FieldRead".
FieldRead<MyClass, int>? reader =
recordDescriptionProvider
.FieldDelegates[recordDescription.Fields[0]].GetFieldRead()
.AssertValue()
as FieldRead<MyClass, int>;
public class MyClass
{
[DataMember(Order = 1)]
public int value;
public MyClass(int value)
{
this.value = value;
}
}
Full Example
Full example
using System.Runtime.Serialization;
using Avalanche.Utilities.Record;
using Avalanche.Utilities.Provider;
class recordproviders
{
public static void Run()
{
{
// <00>
IRecordProviders recordDescriptionProvider = RecordProviders.Create;
// </00>
}
{
// <01>
IRecordProviders recordDescriptionProvider = RecordProviders.NewCached();
// </01>
}
{
// <02>
IRecordProviders recordDescriptionProvider = RecordProviders.Cached;
// </02>
// <03>
IRecordDescription recordDescription =
recordDescriptionProvider
.RecordDescription[typeof(MyClass)]
.AssertValue<IResult<IRecordDescription>, IRecordDescription>();
// </03>
// <04>
IRecordDelegates recordDelegates =
recordDescriptionProvider
.RecordDelegates[recordDescription]
.AssertValue<IResult<IRecordDelegates>, IRecordDelegates>();
// </04>
// <04B>
IRecordDelegates recordDelegates2 =
recordDescriptionProvider
.RecordDelegatesByType[typeof(MyClass)]
.AssertValue<IResult<IRecordDelegates>, IRecordDelegates>();
// </04B>
// <05>
IFieldDelegates fieldDelegates =
recordDescriptionProvider
.FieldDelegates[recordDescription.Fields[0]]
.AssertValue<IResult<IFieldDelegates>, IFieldDelegates>();
// </05>
// <06>
FieldRead<MyClass, int>? reader =
recordDescriptionProvider
.FieldDelegates[recordDescription.Fields[0]].GetFieldRead()
.AssertValue()
as FieldRead<MyClass, int>;
// </06>
}
}
// <10>
public class MyClass
{
[DataMember(Order = 1)]
public int value;
public MyClass(int value)
{
this.value = value;
}
}
// </10>
}