Enhanced.GetTypes
1.0.0
dotnet add package Enhanced.GetTypes --version 1.0.0
NuGet\Install-Package Enhanced.GetTypes -Version 1.0.0
<PackageReference Include="Enhanced.GetTypes" Version="1.0.0" />
paket add Enhanced.GetTypes --version 1.0.0
#r "nuget: Enhanced.GetTypes, 1.0.0"
// Install Enhanced.GetTypes as a Cake Addin #addin nuget:?package=Enhanced.GetTypes&version=1.0.0 // Install Enhanced.GetTypes as a Cake Tool #tool nuget:?package=Enhanced.GetTypes&version=1.0.0
Enhanced.GetTypes
Enhanced.GetTypes
is a NuGet package for observing derived types in current assembly in .NET applications without reflection.
Motivation
The main goal of the package is to provide a way to get derived types in the current assembly without using reflection. This approach allows you to get the types at compile time and use them in different scenarios, such as registering them in the DI container, creating factories, etc.
How to install
dotnet add package Enhanced.GetTypes
How to use
Let's say you have an interface IService
and you want to get all derived types of this interface in the current assembly.
To do this, you need to create a partial class and mark it with the DerivedTypesAttribute
attribute.
using System;
using System.Collections.Generic
using Enhanced.GetTypes;
namespace MyProject;
public partial class ProjectTypes
{
[DerivedTypes(typeof(IService))]
public partial IEnumerable<Type> GetServices();
}
The body of the method will be generated by the source generator and will contain a list of all derived types of the IService
interface in the current assembly.
// <auto-generated />
namespace MyProject
{
partial class ProjectTypes
{
private partial System.Collections.Generic.IEnumerable<System.Type> GetServices()
{
yield return typeof(MyProject.People.PeopleService);
yield return typeof(MyProject.Pets.PetsService);
yield return typeof(MyProject.Cars.CarsService);
yield break;
}
}
}
Now you can use the generated method to get all derived types of the IService
interface for different purposes. For example, registering them in the DI container.
// ...
var serviceDescriptors = ProjectTypes.GetServices()
.Select(type => ServiceDescriptor.Transient(typeof(IService), type);
builder.Services.TryAddEnumerable(serviceDescriptors);
Additionally, you can specify flags for the DerivedTypesAttribute
attribute to filter the types you need.
IncludeInternal
- include internal types.IncludeAbstract
- include abstract types.IncludeInterfaces
- include interfaces.
// ...
[DerivedTypes(typeof(IService), IncludeInternal = true, IncludeAbstract = true, IncludeInterfaces = true)]
public partial IEnumerable<Type> GetServices();
Important notes
- The method marked with the
DerivedTypesAttribute
attribute must returnIEnumerable<Type>
. - Types from referenced assemblies are not included.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0 | 132 | 8/30/2024 |