Cast
Service can be casted to more specific form.
// Create service
IService service = Services.Create(new ConverterHandlers(), CachePolicies.Default);
// Cast service
IService<ConverterFunctionRequest, Delegate> serviceT = service.Cast<ConverterFunctionRequest, Delegate>();
And back to more generic.
// Cast service
IService service = serviceT.Cast();
When using IService<Request, Response> caller doesn't need generics parameters.
// Issue request
Delegate? converter = serviceT.Get(request);
But with uncasted IService caller must specify generic parameters.
// Issue request
Delegate? converter = service.Get<ConverterFunctionRequest, Delegate>(request);
Cast can be towards with lower specifity.
// Issue request
object converter = service.GetRequired<object, object>(request);
And towards higher.
// Issue request
Func<DateTime, string> converter = service.GetRequired<ConverterFunctionRequest, Func<DateTime, string>>(request);
Full Example
Full example
using System;
using System.Linq;
using Avalanche.Converter;
using Avalanche.Service;
public class service_cast
{
public static void Run()
{
{
// <10>
// Create service
IService service = Services.Create(new ConverterHandlers(), CachePolicies.Default);
// Cast service
IService<ConverterFunctionRequest, Delegate> serviceT = service.Cast<ConverterFunctionRequest, Delegate>();
// </10>
}
{
// Create service
IService<ConverterFunctionRequest, Delegate> serviceT = Services.Create<ConverterFunctionRequest, Delegate>(new ConverterHandlers(), CachePolicies.Default);
// <11>
// Cast service
IService service = serviceT.Cast();
// </11>
}
{
// Create service
IService service = Services.Create(new ConverterHandlers(), CachePolicies.Default);
// Create service
IService<ConverterFunctionRequest, Delegate> serviceT = service.Cast<ConverterFunctionRequest, Delegate>();
// Create request
ConverterFunctionRequest request = new ConverterFunctionRequest(typeof(DateTime), typeof(String));
{
// <12a>
// Issue request
Delegate? converter = serviceT.Get(request);
// </12a>
}
{
// <12b>
// Issue request
Delegate? converter = service.Get<ConverterFunctionRequest, Delegate>(request);
// </12b>
}
}
{
// Create service
IService service = Services.Create(new ConverterHandlers(), CachePolicies.Default);
// Create request
ConverterFunctionRequest request = new ConverterFunctionRequest(typeof(DateTime), typeof(String));
{
// <13a>
// Issue request
object converter = service.GetRequired<object, object>(request);
// </13a>
}
{
// <13b>
// Issue request
Func<DateTime, string> converter = service.GetRequired<ConverterFunctionRequest, Func<DateTime, string>>(request);
// </13b>
}
}
}
// <24b>
struct WakeUpRequest { }
// </24b>
}