0.0.1
This commit is contained in:
@@ -1 +1,70 @@
|
||||
# ProxyInterfaceSourceGenerator
|
||||
# ProxyInterfaceSourceGenerator
|
||||
|
||||
This project uses Source Generation to generate an interface and a Proxy class for classes.
|
||||
This makes it possible to wrap external classes which do not have an interface, in a Proxy class which makes it easier to Mock and use DI.
|
||||
|
||||
|
||||
## Install
|
||||
[](https://www.nuget.org/packages/ProxyInterfaceGenerator)
|
||||
|
||||
You can install from NuGet using the following command in the package manager window:
|
||||
|
||||
`Install-Package ProxyInterfaceGenerator`
|
||||
|
||||
Or via the Visual Studio NuGet package manager or if you use the `dotnet` command:
|
||||
|
||||
`dotnet add package ProxyInterfaceGenerator`
|
||||
|
||||
## Usage
|
||||
|
||||
### Given: an external existing class which does not implement an interface
|
||||
``` c#
|
||||
public sealed class Person
|
||||
{
|
||||
public string Name { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
## Create a partial interface
|
||||
And annotate this with `ProxyInterfaceGenerator.Proxy` with the Type which needs to be wrapped:
|
||||
|
||||
``` c#
|
||||
[ProxyInterfaceGenerator.Proxy(typeof(ProxyInterfaceConsumer.Person))]
|
||||
public partial interface IPerson
|
||||
{
|
||||
}
|
||||
```
|
||||
|
||||
## When the code is compiled, this source generator creates the following
|
||||
|
||||
### 1. An additional partial interface
|
||||
Which defines the same properties and methods as in the external class.
|
||||
``` c#
|
||||
public partial interface IPerson
|
||||
{
|
||||
string Name { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### 2. A Proxy class
|
||||
Which takes the external class in the constructor and wraps all properties.
|
||||
|
||||
``` c#
|
||||
public class PersonProxy
|
||||
{
|
||||
public Person _Instance { get; }
|
||||
|
||||
public PersonProxy(Person instance)
|
||||
{
|
||||
_Instance = instance;
|
||||
}
|
||||
|
||||
public string Name { get => _Instance.Name; set => _Instance.Name = value; }
|
||||
}
|
||||
```
|
||||
|
||||
## Use it
|
||||
``` c#
|
||||
IPerson p = new PersonProxy(new Person());
|
||||
p.Name = "test";
|
||||
```
|
||||
@@ -5,6 +5,29 @@
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<LangVersion>9</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<Authors>Stef Heyenrath</Authors>
|
||||
<Description></Description>
|
||||
<Title>ProxyInterfaceGenerator</Title>
|
||||
<PackageId>ProxyInterfaceGenerator</PackageId>
|
||||
<Description>This project uses Source Generation to generate an interface and a Proxy class for classes. This makes it possible to wrap external classes which do not have an interface, in a Proxy class which makes it easier to Mock and use DI.</Description>
|
||||
<PackageTags>class;Fluent;Builder;FluentBuilder;Model;DTO;SourceGenerator;Analyzer;Generation;Generate</PackageTags>
|
||||
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
<PackageReleaseNotes>See ReleaseNotes.md</PackageReleaseNotes>
|
||||
<PackageProjectUrl>https://github.com/StefH/ProxyInterfaceGenerator</PackageProjectUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<RepositoryUrl>https://github.com/StefH/ProxyInterfaceGenerator</RepositoryUrl>
|
||||
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<ProjectGuid>{12344228-91F4-4502-9595-39584E5ABB34}</ProjectGuid>
|
||||
|
||||
<IncludeBuildOutput>false</IncludeBuildOutput>
|
||||
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
|
||||
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)Generated</CompilerGeneratedFilesOutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -16,4 +39,13 @@
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.10.0" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="bin\Debug\netstandard2.0\\ProxyInterfaceGenerator.dll" />
|
||||
<None Remove="bin\Release\netstandard2.0\\ProxyInterfaceGenerator.dll" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="$(OutputPath)\$(AssemblyName).dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
Reference in New Issue
Block a user