FuncR is a small .NET standard library that enables you to register functions against interfaces in C#.
In short, it allows you to go from this:
Into something like this:
FuncR uses a DispatchProxy to generate a proxy class that instantiates the interface at runtime and hooks up the registered functions to the interface methods.
This allows you to inject the interface into your services and use it like any other service in your domain.
Let’s put this all together inside a .NET console app!
Create a new Console app (in .NET Core 2, 3 or .NET 5):
mkdir Your.First.Function
cd Your.First.Function
dotnet new console
Add the FuncR package:
dotnet add package FuncR
Write the implementation:
using System;
using FuncR;
using Microsoft.Extensions.DependencyInjection;
namespace Your.First.Function
{
// We don't need no, implementation
public interface IFooService
{
string Foo (int numberOfFoos);
}
class Program
{
static void Main(string[] args)
{
var services = new ServiceCollection();
services.AddScopedFunction<IFooService>
(nameof(IFooService.Foo))
// string Foo(int numberOfFoos)
.Runs<int, string>(numberOfFoos=>
{
if(numberOfFoos>=5)
return "Too many foos!";
return $"This many foos: '{numberOfFoos}'";
});
var fooService=
services.BuildServiceProvider()
.GetRequiredService<IFooService>();
// Prints: "This many foos: '3'"
Console.WriteLine(fooService.Foo(3));
// Prints: "Too many foos!"
Console.WriteLine(fooService.Foo(5));
}
}}
Run the implementation:
dotnet run
dotnet run output
Details of the example
Line #8 sets up the stage for our service interface.
Line #19 registers the proxy for IFooService
Line #20 registers the function pointer for the name “Foo” on the proxy
Lines #22-28 registers the actual implementation of the function for the proxy in the form of <TParameter1Type, TReturnType>, like any C# Func
Line #30 resolves our registered service from the Dependency Injection container.
Source: Medium
The Tech Platform
Comentarios