DRN.Framework.Utils
0.2.2-preview002
Prefix Reserved
See the version list below for details.
dotnet add package DRN.Framework.Utils --version 0.2.2-preview002
NuGet\Install-Package DRN.Framework.Utils -Version 0.2.2-preview002
<PackageReference Include="DRN.Framework.Utils" Version="0.2.2-preview002" />
paket add DRN.Framework.Utils --version 0.2.2-preview002
#r "nuget: DRN.Framework.Utils, 0.2.2-preview002"
// Install DRN.Framework.Utils as a Cake Addin #addin nuget:?package=DRN.Framework.Utils&version=0.2.2-preview002&prerelease // Install DRN.Framework.Utils as a Cake Tool #tool nuget:?package=DRN.Framework.Utils&version=0.2.2-preview002&prerelease
DRN.Framework.Utils package contains common codes for other DRN.Framework packages and projects developed with DRN.Framework.
Module
DRN.Utils can be added with following module
namespace DRN.Framework.Utils;
public static class UtilsModule
{
public static IServiceCollection AddDrnUtils(this IServiceCollection collection)
{
collection.AddServicesWithAttributes();
return collection;
}
}
Dependency Injection with Attributes
Each module should be created in the assembly that will be scanned.
public static class InfraModule
{
public static IServiceCollection AddSampleInfraServices(this IServiceCollection sc)
{
sc.AddServicesWithAttributes();
return sc;
}
}
Services resolution for attribute based services can be validated with a single line.
serviceProvider.ValidateServicesAddedByAttributes();
Attribute based dependency injection reduces wiring efforts and helps developer to focus on developing. This approach also improves service resolution validation during startup and integration testing.
[Theory]
[DataInlineContext]
public void Validate_Sample_Dependencies(TestContext context)
{
context.ServiceCollection.AddSampleApplicationServices();
context.ServiceCollection.AddSampleInfraServices();
context.ValidateServices();
}
Lifetime Attributes
Example attribute usage:
[Transient<IIndependent>]
public class Independent : IIndependent
{
}
Following attributes marks services with a lifetime and when service collection called with AddServicesWithAttributes method in the assembly marked belong they are automatically added.
namespace DRN.Framework.Utils.DependencyInjection.Attributes;
public class LifetimeAttribute<TService>(ServiceLifetime serviceLifetime, bool tryAdd = true, object? key = null)
: LifetimeAttribute(serviceLifetime, typeof(TService), tryAdd, key);
public class LifetimeWithKeyAttribute<TService>(ServiceLifetime serviceLifetime, object key, bool tryAdd = true)
: LifetimeAttribute(serviceLifetime, typeof(TService), tryAdd, key);
public class ScopedAttribute<TService>(bool tryAdd = true) : LifetimeAttribute<TService>(ServiceLifetime.Scoped, tryAdd);
public class ScopedWithKeyAttribute<TService>(object key, bool tryAdd = true) : LifetimeWithKeyAttribute<TService>(ServiceLifetime.Scoped, key, tryAdd);
public class TransientAttribute<TService>(bool tryAdd = true) : LifetimeAttribute<TService>(ServiceLifetime.Transient, tryAdd);
public class TransientWithKeyAttribute<TService>(object key, bool tryAdd = true) : LifetimeWithKeyAttribute<TService>(ServiceLifetime.Transient, key, tryAdd);
public class SingletonAttribute<TService>(bool tryAdd = true) : LifetimeAttribute<TService>(ServiceLifetime.Singleton, tryAdd);
public class SingletonWithKeyAttribute<TService>(object key, bool tryAdd = true) : LifetimeWithKeyAttribute<TService>(ServiceLifetime.Singleton, key, tryAdd);
HasServiceCollectionModuleAttribute
Attributes derived from HasServiceCollectionModuleAttribute
can be used to mark custom service collection modules.
In the following example HasDrnContextServiceCollectionModuleAttribute
marks DrnContext<TContext>
and its service collection module.
This way dbContexts inherited from DrnContext
doesn't need a lifetime attribute and they can be registered by AddServicesWithAttributes
with their custom factory.
This offers following flexibility:
- ServiceCollectionModule of DrnContexts are defined in
DRN.Framework.EntityFramework
- Inherited dbContexts are defined in user defined projects and points a module in another project.
AddServicesWithAttributes
extension method defined inDRN.Framework.Utils
registers them without dependingDRN.Framework.EntityFramework
project
public class HasDrnContextServiceCollectionModuleAttribute : HasServiceCollectionModuleAttribute
{
static HasDrnContextServiceCollectionModuleAttribute()
{
ModuleMethodInfo = typeof(ServiceCollectionExtensions).GetMethod(nameof(ServiceCollectionExtensions.AddDbContextsWithConventions))!;
}
}
[HasDrnContextServiceCollectionModule]
public abstract class DrnContext<TContext> : DbContext, IDesignTimeDbContextFactory<TContext>, IDesignTimeServices where TContext : DbContext, new()
{
...
Configurations
Following configuration sources can be used to add configurations from different sources
- JsonSerializerConfigurationSource converts poco objects to configuration
- RemoteJsonConfigurationSource fetches remote configuration (experimental and incomplete)
AppSettings
Following IAppSettings interface is defined and can be used to obtain appsettings. It has utility methods that allow fail fast.
namespace DRN.Framework.Utils.Settings;
public interface IAppSettings
{
IConfiguration Configuration { get; }
bool TryGetConnectionString(string name, out string connectionString);
string GetRequiredConnectionString(string name);
bool TryGetSection(string key, out IConfigurationSection section);
IConfigurationSection GetRequiredSection(string key);
}
ExtensionMethods
- ServiceCollectionExtensions
- ReplaceInstance
- ReplaceTransient
- ReplaceScoped
- ReplaceSingleton
- GetAllAssignableTo<TService>
- StringExtensions
- ToStream
- TypeExtensions
- MakeGenericMethod
- AssemblyExtensions
- GetTypesAssignableTo
Commit Info
Author: Duran Serkan KILIÇ
Date: 2024-01-19 00:39:49 +0300
Hash: 9ed2ad070a2da35c57e2741172e1abd7070f38cf
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. 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. |
-
net8.0
- DRN.Framework.SharedKernel (>= 0.2.2-preview002)
- Microsoft.Extensions.Configuration.Json (>= 8.0.0)
- Microsoft.Extensions.DependencyInjection (>= 8.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Logging (>= 8.0.0)
- System.Net.Http (>= 4.3.4)
- System.Text.RegularExpressions (>= 4.3.1)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on DRN.Framework.Utils:
Package | Downloads |
---|---|
DRN.Framework.EntityFramework
DRN.Framework.EntityFramework provides DrnContext with conventions to develop rapid and effective domain models. ## Commit Info Author: Duran Serkan KILIÇ Date: 2024-11-23 12:55:43 +0300 Hash: 32f0afe1111835522efd4371482436aa3de7c36d |
|
DRN.Framework.Hosting
DRN.Framework.Hosting ## Commit Info Author: Duran Serkan KILIÇ Date: 2024-11-23 12:55:43 +0300 Hash: 32f0afe1111835522efd4371482436aa3de7c36d |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.7.0-preview005 | 0 | 11/27/2024 |
0.7.0-preview004 | 72 | 11/23/2024 |
0.7.0-preview003 | 82 | 11/20/2024 |
0.7.0-preview002 | 83 | 11/17/2024 |
0.7.0-preview001 | 89 | 11/14/2024 |
0.6.0 | 100 | 11/10/2024 |
0.6.0-preview002 | 69 | 11/10/2024 |
0.6.0-preview001 | 66 | 11/10/2024 |
0.5.1-preview002 | 67 | 9/30/2024 |
0.5.1-preview001 | 71 | 9/22/2024 |
0.5.0 | 129 | 8/30/2024 |
0.5.0-preview011 | 96 | 8/30/2024 |
0.5.0-preview010 | 141 | 8/25/2024 |
0.5.0-preview009 | 123 | 8/8/2024 |
0.5.0-preview008 | 115 | 8/7/2024 |
0.5.0-preview007 | 92 | 8/2/2024 |
0.5.0-preview006 | 82 | 7/30/2024 |
0.5.0-preview005 | 101 | 7/27/2024 |
0.5.0-preview004 | 111 | 7/15/2024 |
0.5.0-preview003 | 132 | 6/6/2024 |
0.5.0-preview002 | 119 | 6/5/2024 |
0.5.0-preview001 | 117 | 6/4/2024 |
0.4.0 | 128 | 5/19/2024 |
0.4.0-preview006 | 104 | 5/19/2024 |
0.4.0-preview005 | 95 | 5/12/2024 |
0.4.0-preview004 | 91 | 5/12/2024 |
0.4.0-preview003 | 95 | 5/11/2024 |
0.4.0-preview002 | 97 | 5/8/2024 |
0.4.0-preview001 | 119 | 5/5/2024 |
0.3.1-preview001 | 108 | 4/26/2024 |
0.3.0 | 126 | 4/23/2024 |
0.3.0-preview002 | 111 | 4/23/2024 |
0.3.0-preview001 | 123 | 4/23/2024 |
0.2.2-preview010 | 120 | 4/11/2024 |
0.2.2-preview009 | 124 | 3/18/2024 |
0.2.2-preview008 | 131 | 3/18/2024 |
0.2.2-preview007 | 118 | 3/16/2024 |
0.2.2-preview006 | 119 | 3/11/2024 |
0.2.2-preview005 | 116 | 3/10/2024 |
0.2.2-preview004 | 118 | 3/10/2024 |
0.2.2-preview003 | 139 | 1/22/2024 |
0.2.2-preview002 | 108 | 1/18/2024 |
0.2.2-preview001 | 127 | 1/14/2024 |
0.2.1 | 215 | 1/7/2024 |
0.2.0 | 163 | 12/31/2023 |
0.2.0-preview009 | 125 | 12/31/2023 |
0.2.0-preview008 | 122 | 12/30/2023 |
0.2.0-preview007 | 128 | 12/28/2023 |
0.2.0-preview006 | 122 | 12/27/2023 |
0.2.0-preview005 | 119 | 12/25/2023 |
0.2.0-preview004 | 125 | 12/23/2023 |
0.2.0-preview003 | 114 | 12/20/2023 |
0.2.0-preview002 | 143 | 12/19/2023 |
0.2.0-preview001 | 141 | 12/18/2023 |
0.1.0 | 173 | 11/26/2023 |
0.1.0-preview013 | 130 | 11/26/2023 |
0.1.0-preview012 | 99 | 11/20/2023 |
0.1.0-preview011 | 127 | 11/19/2023 |
0.1.0-preview010 | 116 | 10/30/2023 |
0.1.0-preview009 | 124 | 10/29/2023 |
0.1.0-preview008 | 133 | 10/27/2023 |
0.1.0-preview007 | 117 | 10/11/2023 |
0.1.0-preview006 | 133 | 10/9/2023 |
0.1.0-preview005 | 132 | 10/8/2023 |
0.1.0-preview004 | 130 | 10/8/2023 |
0.1.0-preview003 | 112 | 10/3/2023 |
0.1.0-preview002 | 132 | 10/3/2023 |
0.1.0-preview001 | 126 | 10/2/2023 |
Not every version includes changes, features or bug fixes. This project can increment version to keep consistency with other DRN.Framework projects.
## Version 0.2.0
### Breaking Changes
* LifetimeContainer renamed as DrnServiceContainer
* Lifetime attributes moved to DRN.Framework.Utils.DependencyInjection.Attributes namespace
### New Features
* JsonSerializerConfigurationSource added to add dotnet objects to configuration
* RemoteJsonConfigurationSource added to remote settings to configuration (experimental)
* ConnectionStringsCollection added as poco model to serialize connection strings
* StringExtensions added
* ToStream method added to convert strings to in memory stream
* HasServiceCollectionModuleAttribute added
## Version 0.1.0
### Breaking Changes
### New Features
* AppSettings added
* ServiceCollectionExtensions added
* ReplaceInstance
* ReplaceTransient
* ReplaceScoped
* ReplaceSingleton
* Attribute based dependency injection added
* ScopedAttribute, TransientAttribute, SingletonAttribute and LifetimeAttribute added
* ScopedWithKeyAttribute, TransientWithKeyAttribute, SingletonWithKeyAttribute and LifetimeWithKeyAttribute added
* ServiceCollection AddServicesWithAttributes extension added
* ServiceProvider ValidateServicesAddedByAttributes extension added
### Bug Fixes
## Commit Info
Author: Duran Serkan KILIÇ
Date: 2024-01-19 00:39:49 +0300
Hash: 9ed2ad070a2da35c57e2741172e1abd7070f38cf