DataTypeRequest
DataTypeRequest<T>(Target) is a request for datatype of T ''Target'' descriptor. The default handlers in DataTypeHandlers.Instance help facilitate requests and NetTypeHandlers.Instance handle System.Type target types. Other target types can be implemented with additional handlers.
public enum MyEnum { Car, Truck, Bike, Plane, Train }
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
DataTypeRequest<NetType> request = new(typeof(MyEnum));
// Query datatype
var datatype = service.GetRequired<DataTypeRequest<NetType>, IDataType>(request);
// Print
WriteLine(datatype.PrintTree());
docs.MyEnum : IEnumerationType
Request can be combined with other requests.
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
DataTypeRequest<NetType> request = new(new NetType(new TypeRequest("MyEnum, docs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")));
// Query datatype
IDataType datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
// Print
WriteLine(datatype.PrintTree());
NetType describes .NET type in unspecified meta-kind.
// Create request for unspecific meta-type
DataTypeRequest<NetType> request = new(typeof(MyEnum));
docs.MyEnum : IEnumerationType
However, if request is for specific T, then handlers create datatype for that specificity. For example, a request for NetRecord always returns an IRecordType.
// Create request
DataTypeRequest<NetRecord> request = new(typeof(MyEnum));
docs.MyEnum, docs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null : IRecordType ├── Fields[0] = value__ : IFieldType │ └── Value = int : IIntegerType └── Parents[0] = System.Enum, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : IRecordType └── Parents[0] = System.ValueType, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e : IRecordType
DataTypeRequest.Create(interfaceType, target) constructs datatype using type argument.
// Create request
var request = DataTypeRequest.Create(typeof(NetRecord), new NetRecord(typeof(MyEnum)));
Interfaces and non-sealed classes return IAnyType for NetType descriptor.
// Create request
var request = new DataTypeRequest<NetAny>(typeof(ISomeInterface));
docs.ISomeInterface, docs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null : IAnyType └── Constraint = docs.ISomeInterface, docs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null : IRecordType
DataTypeRequest<object>(target) can be used when target object is unknown.
// Create request
var request = new DataTypeRequest<object>(new NetType(typeof(ISomeInterface)));
Full Example
Full example
using Avalanche.DataType;
using Avalanche.Service;
using static System.Console;
public class datatyperequest
{
public static void Run()
{
{
// <01>
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
DataTypeRequest<NetType> request = new(typeof(MyEnum));
// Query datatype
var datatype = service.GetRequired<DataTypeRequest<NetType>, IDataType>(request);
// Print
WriteLine(datatype.PrintTree());
// </01>
}
{
// <02>
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
DataTypeRequest<NetType> request = new(new NetType(new TypeRequest("MyEnum, docs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")));
// Query datatype
IDataType datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
// Print
WriteLine(datatype.PrintTree());
// </02>
}
{
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// <03>
// Create request for unspecific meta-type
DataTypeRequest<NetType> request = new(typeof(MyEnum));
// </03>
// Query datatype
var datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
// Print
WriteLine(datatype.PrintTree());
}
{
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// <05>
// Create request
DataTypeRequest<NetRecord> request = new(typeof(MyEnum));
// </05>
// Query datatype
IDataType datatype = service.GetRequired<DataTypeRequest<NetRecord>, IRecordType>(request);
// Print
WriteLine(datatype.PrintTree());
}
{
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// <06>
// Create request
var request = DataTypeRequest.Create(typeof(NetRecord), new NetRecord(typeof(MyEnum)));
// </06>
// Query datatype
var datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
// Print
WriteLine(datatype.PrintTree());
}
{
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// <07>
// Create request
var request = new DataTypeRequest<NetAny>(typeof(ISomeInterface));
// </07>
// Query datatype
var datatype = service.GetRequired<IDataTypeRequest, IAnyType>(request);
// Print
WriteLine(datatype.PrintTree());
}
{
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// <08>
// Create request
var request = new DataTypeRequest<object>(new NetType(typeof(ISomeInterface)));
// </08>
// Query datatype
var datatype = service.GetRequired<IDataTypeRequest, IAnyType>(request);
// Print
WriteLine(datatype.PrintTree());
}
}
}
// <99>
public enum MyEnum { Car, Truck, Bike, Plane, Train }
// </99>
// <100>
public class ISomeInterface { }
// </100>