C# Support
Facility supports tools and libraries for using C# (.NET) with Facility Service Definitions.
Tools
Generate C# for your Facility Service Definition by doing one of the following:
- Use the Facility Editor. Enter an API definition in the left pane, choose the "C#" generator, review the generated files, and click Download.
- Run the
fsdgencsharptool on the command line or in a build script. - Use the
Facility.CodeGen.CSharp.NET library (NuGet Package) in your own build tool.
fsdgencsharp
fsdgencsharp is a command-line tool that generates C# for a Facility Service Definition.
Install fsdgencsharp as documented from its NuGet package.
fsdgencsharp generates multiple C# files and supports the standard command-line options as well as the following additional command-line options:
--namespace <name>: Sets the namespace used by the generated C#.--csproj: Updates any .csproj files in the output directory. Specifically, it adds any missing.g.csfiles and removes any.g.csfiles no longer needed.
Events
Events in Facility enable streaming responses using server-sent events (SSE). The C# code generator produces special method signatures for events that return streams of responses.
For an event defined as:
event streamChat
{
prompt: string;
}:
{
textDelta: string;
}
The generated C# interface includes:
Task<ServiceResult<IAsyncEnumerable<ServiceResult<StreamChatResponseDto>>>> StreamChatAsync(
StreamChatRequestDto request,
CancellationToken cancellationToken = default);
Using Events in C#
Clients can consume event streams using await foreach:
var request = new StreamChatRequestDto { Prompt = "Hello" };
var result = await client.StreamChatAsync(request);
if (result.IsFailure)
{
// Handle error
Console.WriteLine($"Error: {result.Error.Message}");
return;
}
await foreach (var chunkResult in result.Value)
{
if (chunkResult.IsFailure)
{
// Handle error in stream
Console.WriteLine($"Stream error: {chunkResult.Error.Message}");
break;
}
var chunk = chunkResult.Value;
Console.Write(chunk.TextDelta);
}
The HTTP client implementation uses server-sent events to receive response chunks from the server, automatically deserializing each SSE event into a response DTO.