Skip to main content

Advanced configuration

You can use complex data types for configuration in YAML instancing. Make sure you are not using immutable data types like strings or read-only collections without making them nullable. For collections we recommend using IList<T> that are instanced with List<T> if you do not want to be nullable.

Advanced configuration​

Examples of configurations:

YAML type.NET type
Scalar
AString: hello world
AnInt: 10
ABool: true

string? AString { get; set; }
int? AnInt {get;set;}
bool? ABool { get; set; }
Sequences
SimpleList:
- Hello
- World
IList&ltstring&gt SimpleList { get; set; }
Sequences can also be IEnumerable&lttype&gt, but must then be nullable

Example of complex data types support​

This example shows an example of how to use complex configuration options.


ComplexConfig: # This should have the same name as class
AString: hello world
AnInt: 10
ABool: true
AStringList:
- this
- is
- cool!
Devices:
- name: tv
commands:
- name: command1
data: some code
- name: command2
data: some code2";
// The app using the config
[NetDaemonApp]
public class ComplexConfigApp
{

public ComplexConfigApp(IAppConfig<ComplexConfig> config)
{
ComplexConfig complexConfig = config.Value;

// Use config
foreach(var device in complexConfig.Devices)
{
// Do something useful or fun
}
}
}

public class ComplexConfig
{
public string? AString { get; set; }
public int? AnInt { get; set; }
public bool? ABool { get; set; }
public IList<string> AStringList { get; set; }
public IEnumerable<Device>? Devices { get; set; }
}

public class Device
{
public string? name { get; set; }
public IEnumerable<Command>? commands { get; set; }
}
public class Command
{
public string? name { get; set; }
public string? data { get; set; }
}

Troubleshooting​

Issue​

My config properties are all null.

Check​

Ensure your YAML file is being copied to the output folder.

Fix​

Ensure the following is in your .csproj file to do this automatically for all YAML files:

<ItemGroup>
<None Include="apps\**\*.yaml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
</None>
</ItemGroup>

Alternatively, set Copy to Output Directory to Copy Always.

image