RSCG – RSCG_FunctionsWithDI

RSCG – RSCG_FunctionsWithDI
 
 

name RSCG_FunctionsWithDI
nuget https://www.nuget.org/packages/RSCG_FunctionsWithDI/
link https://github.com/ignatandrei/functionsdi
author Andrei Ignat

Generating functions that have parameters from services

 

This is how you can use RSCG_FunctionsWithDI .

The code that you start with is


<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

<ItemGroup>
		<PackageReference Include="RSCG_FunctionsWithDI" Version="2022.7.7.636" ReferenceOutputAssembly="false" OutputItemType="Analyzer" />
		<PackageReference Include="RSCG_FunctionsWithDI_Base" Version="2022.7.7.636" />
	<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />



</ItemGroup>
	<PropertyGroup>
		<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
		<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)GX</CompilerGeneratedFilesOutputPath>
	</PropertyGroup>

</Project>


The code that you will use is


// See https://aka.ms/new-console-template for more information
using Microsoft.Extensions.DependencyInjection;
using RSCG_FunctionsWithDIDemo;
var services = new ServiceCollection();
services.AddSingleton<TestDIMyClass>();
services.AddSingleton<TestDI1>();
services.AddSingleton<TestDI2>();
var serviceProvider = services.BuildServiceProvider();
var test = serviceProvider.GetRequiredService<TestDIMyClass>();
Console.WriteLine("the TestMyFunc1 is not called with [FromServices] parameters " +test.TestMyFunc1(10, 3));



namespace RSCG_FunctionsWithDIDemo;

public class TestDI1
{
    public int x;
}



namespace RSCG_FunctionsWithDIDemo;

public class TestDI2
{
    public int x;
}



using RSCG_FunctionsWithDI_Base;

namespace RSCG_FunctionsWithDIDemo;
public partial class TestDIMyClass
{

    public bool TestMyFunc1([FromServices] TestDI1 t1, [FromServices] TestDI2 t2, int x, int y)
    {
        return true;
    }
}

 

The code that is generated is

namespace RSCG_FunctionsWithDIDemo
{ 
public partial class TestDIMyClass
{ 
private TestDI1 _TestDI1;
private TestDI2 _TestDI2;
public TestDIMyClass  

(TestDI1 _TestDI1,TestDI2 _TestDI2)
 { 
this._TestDI1=_TestDI1;
this._TestDI2=_TestDI2;

 } //end constructor 

//making call to TestMyFunc1
public bool TestMyFunc1(int  x,int  y){ 
var t1 = this._TestDI1  ;
if(t1 == null) throw new ArgumentException(" service TestDI1  is null in TestDIMyClass ");
var t2 = this._TestDI2  ;
if(t2 == null) throw new ArgumentException(" service TestDI2  is null in TestDIMyClass ");
return  TestMyFunc1(t1,t2,x,y);
}

 }//class
 }//namespace

Code and pdf at

https://ignatandrei.github.io/RSCG_Examples/v2/docs/RSCG_FunctionsWithDI