A collection of Blazor components for working with OneOf types in your Blazor project.
I was working on a project where I needed to render different components based on the value of a OneOf
.
I couldn't get the OneOf.Switch()
method to work in Blazor, and writing switch
statements over and over again
was annoying and looked messy.
Instead I made a component library, which is actually just a switch statement in disguise, and found it made my Blazor components much more readable and in general nicer to work with.
- Blazor components for
OneOf
types with up to 8 type parameters. - Blazor components for types that inherit from
OneOfBase
, also with up to 8 type parameters.
That's it. It's a pretty simple library 😁
Install the Fenris.OneOfContrib.Blazor NuGet package.
dotnet add package Fenris.OneOfContrib.Blazor
See the Examples project for a full, simple example.
Let's make a small example where we have to deal with a OneOf<string, int>
.
First, add the using either to your _Imports.razor
file, or directly in your specific pages/components:
@using Fenris.OneOfContrib.Blazor.Components
Then use the component in your blazor pages or components
<OneOfSwitch2 Value="myOneOf">
<T0Template>
<p>It's a string and the value is @context!</p>
</T0Template>
<T1Template>
<p>It's an int and the value is @context!</p>
</T1Template>
</OneOfSwitch2>
@code {
private OneOf<string, int> myOneOf = "Hello World!";
}
If you are using a OneOfBase
type, you need to use the <OneOfBaseSwitch2>
component instead. Everything else is
identical.
If your union contains more than two types, you need to use the <OneOfSwitchN>
or <OneOfBaseSwitchN>
components,
where N
is the number of types in your union. E.g. <OneOfSwitch5>
If you find a bug or have a feature request, please open an issue.
Pull requests are also welcome 😊