An open API service indexing awesome lists of open source software.

https://github.com/ignatandrei/rscg_interface_to_null_object

Implementation of https://en.wikipedia.org/wiki/Null_object_pattern from interface
https://github.com/ignatandrei/rscg_interface_to_null_object

Last synced: 4 months ago
JSON representation

Implementation of https://en.wikipedia.org/wiki/Null_object_pattern from interface

Awesome Lists containing this project

README

          

[![NuGet version](https://img.shields.io/nuget/v/rscg_Interface_to_null_object.svg?style=flat-square)](https://www.nuget.org/packages/rscg_Interface_to_null_object)

[![NuGet version](https://img.shields.io/nuget/v/rscg_Interface_to_null_object_common.svg?style=flat-square)](https://www.nuget.org/packages/rscg_Interface_to_null_object_common)

# Interface to Null Object Pattern
Implementation of https://en.wikipedia.org/wiki/Null_object_pattern from interface

# Installation

Add to your csproj file:

```xml





true
$(BaseIntermediateOutputPath)\GX

```

Or add the nuget packages rscg_Interface_to_null_object and rscg_Interface_to_null_object_common

# Usage

## Simple usage
```csharp
[InterfaceToNullObject.ToNullObject]
public interface IEmployee
{
public string FirstName { get; set; }
public string LastName { get; set; }
public IDepartment Department { get; set; }
public string GetFullName();

}
```

And then a C# class that implements the interface will be generated

```csharp
public partial class Employee_null : global::IntegrationConsole.IEmployee
{

public virtual string FirstName { get; set; } = default(string);

public virtual string LastName { get; set; } = default(string);

public virtual IntegrationConsole.IDepartment Department { get; set; } = default(IntegrationConsole.IDepartment);

public virtual string GetFullName() { return default(string); }

}

```
## Deserialize to interface

See following code that deserializes to interface with a converter that is automatically generated

```csharp
//serialize and deserialize
var empString = JsonSerializer.Serialize(employee);
Console.WriteLine(empString);
//deserialize

var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
DefaultBufferSize = 128
};
options.Converters.Add(new IDepartmentConverter());
options.Converters.Add(new IEmployeeConverter());

var emp2 = JsonSerializer.Deserialize(empString,options);
ArgumentNullException.ThrowIfNull(emp2);
Console.WriteLine(emp2.FirstName);
Console.WriteLine(emp2.Department.Name);
Debug.Assert(emp2.FirstName == "Andrei");
```

## Adding default values

Let's say you want to return an empty string for the GetFullName method, you can add the following code to your csproj file

```xml

return ""

```

So now the code will be generated like this

```csharp
public virtual string GetFullName() { return "" ; }
```

For array and generics, see
```xml



return ""
return []
return AsyncEnumerable.Empty_Of_IntegrationConsole.IEmployee_EndOf();

```