Headsoft.Core
0.21.0
dotnet add package Headsoft.Core --version 0.21.0
NuGet\Install-Package Headsoft.Core -Version 0.21.0
<PackageReference Include="Headsoft.Core" Version="0.21.0" />
paket add Headsoft.Core --version 0.21.0
#r "nuget: Headsoft.Core, 0.21.0"
// Install Headsoft.Core as a Cake Addin #addin nuget:?package=Headsoft.Core&version=0.21.0 // Install Headsoft.Core as a Cake Tool #tool nuget:?package=Headsoft.Core&version=0.21.0
Headsoft.Core
Nuget
<PackageReference Include="Headsoft.Core" Version="0.21.0" />
- Dependências
- AutoMapper.Extensions.Microsoft.DependencyInjection Version=12.0.1
- FluentValidation.DependencyInjectionExtensions Version=11.7.1
- Microsoft.Extensions.Caching.Abstractions Version=7.0.0
- Microsoft.Extensions.Configuration.Binder Version=7.0.4
- Microsoft.Extensions.DependencyInjection.Abstractions Version=7.0.0
- Microsoft.Extensions.Hosting.Abstractions Version=7.0.0
- Microsoft.Extensions.Logging.Abstractions Version=7.0.1
- Microsoft.Extensions.Options.ConfigurationExtensions Version=7.0.0
Attributes
DependencyInjectionIgnoreAttribute
- Indica que o objeto não será registrado no ServiceProvider pelos métodos de extensão em
IServiceCollectionExtensions
.
Exceptions
ExternalAPIException
- Representa um erro que ocorre ao tentar chamar uma API externa (Workspace por exemplo).
InvalidServiceProviderException
- Representa um erro que ocorre ao tentar validar um ServiceProvider.
NotAllowedOperationException
- Representa um erro que ocorre ao se tentar realizar uma operação não permitida.
Extensions (Principais)
JsonExtensions
.FromJson()
<details> <summary>Exemplo de uso</summary>string json = """"{"id":123,"name":"Giuseppe Kadura"}""""; Person person = json.FromJson<Person>(); Person person = json.FromJson<Person>(Person.Default); // caso json==null, retorna default Person person = json.FromJson(typeof(Person));
</details>
.ToJson()
<details> <summary>Exemplo de uso</summary>Person person = new() { Id = 123, Name = "Giuseppe Kadura" }; string json = person.ToJson(); // json = {"id":123,"name":"Giuseppe Kadura"}
</details>
EnumExtensions
.ToFriendlyName()
<details> <summary>Exemplo de uso</summary>public enum SampleEnum : byte { [Description("Este é o tipo A")] TipoA = 1, [Description("Este é o tipo B")] TipoB, // Sem description TipoC = 99 } var enumA = SampleEnum.TipoA; var enumC = SampleEnum.TipoC; var enumNull = default(SampleEnum?); var notEnum = (SampleEnum)77; Console.WriteLine(enumA.ToFriendlyName()); // "Este é o tipo A" Console.WriteLine(enumC.ToFriendlyName()); // "TipoC" Console.WriteLine(enumNull.ToFriendlyName("")); // "" Console.WriteLine(enumNull.ToFriendlyName()); // null Console.WriteLine(enumNull.ToFriendlyName("Nenhum")); // "Nenhum" Console.WriteLine(notEnum.ToFriendlyName()); // "77"
</details>
.ToEnum()
<details> <summary>Exemplo de uso</summary>var enumA = "TipoA".ToEnum<SampleEnum>(); var enumB = "Este é o tipo B".ToEnum<SampleEnum>(); var notEnum = "TipoD".ToEnum<SampleEnum>(); Console.WriteLine((byte?)enumA); // 1 Console.WriteLine((byte?)enumB); // 2 Console.WriteLine((byte?)notEnum); // null
</details>
DateTimeExtensions
IsBetween <details> <summary>Exemplo de uso</summary> <p> Checa se uma data está entre duas datas (modo inclusivo). </p>
// Natal de 2023 var dateToCheck = new DateTime(2023, 12, 25); var year2023 = new Period( new DateTime(2023, 01, 01), new DateTime(2023, 12, 31)); var decade90 = new Period( new DateTime(1990, 01, 01), new DateTime(1999, 12, 31)); var after2000 = new Period( new DateTime(2000, 01, 01), null); var before2000 = new Period( null, new DateTime(1999, 12, 31)); var isYear2023 = dateToCheck.IsBetween(year2023); var isDecade90 = dateToCheck.IsBetween(decade90); var isAfter2000 = dateToCheck.IsBetween(after2000); var isBefore2000 = dateToCheck.IsBetween(before2000); Console.WriteLine(isYear2023); // true Console.WriteLine(isDecade90); // false Console.WriteLine(isAfter2000); // true Console.WriteLine(isBefore2000); // false
Além desse método, existem mais overloads. </details>
IServiceCollectionExtensions
AddImplementations <details> <summary>Exemplo de uso</summary> <p> No exemplo abaixo, busca-se as interfaces do assembly de CoreEntry cujo nome termina em "Provider" e que herdam de IService (ex.: IDataProvider : IService), e então busca para cada uma, sua implementação no assembly de DataEntry. Em seguida, adiciona os objetos ao ServiceCollection (interface x implementação). </p>
services.AddImplementations<IService, CoreEntry, DataEntry>("Provider");
Além desse método, existem mais overloads. </details>
Release Notes
0.21.0
- Refatoração em
JsonExtensions
;JSON_DEFAULT_OPTIONS
agora também tem como padrão as seguintes propriedades:Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping PropertyNamingPolicy = JsonNamingPolicy.CamelCase
- Refatoração de
IFilter<TEntity>
eFilterBase<TKey, TEntity>
:- Alteração de Prop
ExtendedExpressions
paraExpressions
; - Remoção de método
ToExpression()
; - Adição de método
AddExpression(Expression<Func<TEntity, bool>>)
;
- Alteração de Prop
- Refatoração total de
IRepository
,IService
eServiceBase
;IEntityReadServiceBase
eEntityReadServiceBase
removidos.IReadService
eReadService
removidos.IWriteService
removido.
- Adicionadas props
string? Tag
estring ResultTypeDescription
emApiResult
; - Adicionado
HttpClientBase
para se utilizar como service que faz requisições HTTP.
⚠️ Breaking Changes:
IEntityReadServiceBase
,IReadService
, eIWriteService
e suas implementações removidas. Devem ser substituídas pelos respectivosIService<(...)>
.- Houveram algumas alterações na ordem dos tipos genéricos nos IServices em relação à
IEntityReadServiceBase
,IReadService
, eIWriteService
.
<details> <summary>Releases Anteriores</summary>
0.20.0
- Refatoração em
Notification
;- Adicionada Propriedade
object? Tag
para que possa conter algum dado referente àNotification
; - CTOR
Notification(Exception, ResultTypes)
agora assinalaMessage
comException.Message
ao invés deException.ToString()
(que agora está emTag
). Antes,Detail
recebia aException.InnerException.ToString()
, e agora, recebenull
.
- Adicionada Propriedade
- Adicionado
RangeFilter
; PeriodFilter
agora herda deRangeFilter
;
⚠️ Breaking Changes:
Notification.Detail
renomeada paraNotification.Details
;- Em
PeriodFilter
, as propriedadesInitialDate
eEndDate
foram renomeadas paraMinValue
eMaxValue
respectivamente;
0.19.2
- Adicionado SetExpressions() em IFilter;
- Adicionado ToExpression() em KeyList;
- Adicionado ToExpression() em SearchTerm;
0.19.0
- Novos CTORs para:
Notification
;InfoDTO<T>
;ListDTO<T>
;KeyList<TKey>
;PeriodFilter
;SearchKey<TKey>
;SearchTerm
;Pagination
;
- Refatoração de CTORs para
OperationResult
; - Adicionado atributo
DependencyInjectionIgnoreAttribute
. - Adicionado método
AddItems(IEnumerable<TKey>, SearchKeyModes)
emKeyList<TKey>
; - Adicionado property
ExtendedExpressions
emIFilter<TEntity>
; - Adicionada classe de extensão
DateTimeExtensions
; - Adicionadas classes
CustomColumnSelector
eNoneColumnSelector
;
⚠️ Breaking Changes:
SearchTerm
refatorado de struct para class;- Refatoração completa de Services (interfaces e classes) alterando seus tipos genéricos:
IReadService
renomeado paraIEntityReadService
e genéricos alterados:- Adicionado
TKey
; - Revovido
TInfoDTO
(Método GetInfoAsync usa oInfoDTO<TKey>
;
- Adicionado
- Novo
IReadService
ficou mais indenpendente e agora só possuiTFilter
como genérico; IWriteService
teve genéricos alterados:- Adicionado
TKey
; - Alterado
TUpdateDTO
que agora precisa herdar deIKey<TKey>
;
- Adicionado
- Devido às alterações acima,
IService
eIServiceBase
tiveram seus genéricos e CTOR modificados para se adequar;
0.18.1
- Adicionado em
IOperationResult.SetDataToNull()
; - Adicionado CTOR
OperationResult(string, string)
; OperationResult.IsValid
agora checa apenas notificações igual ou acima de Warning;- Correção de métodos em
DateTimeHelper
; - Atualização de pacote FluentValidations (de 11.5.2 para 11.6.0);
0.18.0
Adicionada mensagem em
CommonMessages
.Método
EnumExtensions.ToFriendlyName
refatorado.Método
JsonExtensions.StringDeserialize
removido.ISubDomainProvider
removido. A interface agora está em Workspace.Adicionados
DateTimeHelper
eValidationResultHelper
.Adicionada documentação em README
Breaking Changes:
ISubDomainProvider
movido para Workspace.
</details>
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. 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. |
-
net7.0
- AutoMapper.Extensions.Microsoft.DependencyInjection (>= 12.0.1)
- FluentValidation.DependencyInjectionExtensions (>= 11.7.1)
- Microsoft.Extensions.Caching.Abstractions (>= 7.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 7.0.4)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 7.0.0)
- Microsoft.Extensions.Http (>= 7.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 7.0.1)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 7.0.0)
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 |
---|
0.21.0
+ Refatoração em JsonExtensions.JSON_DEFAULT_OPTIONS;
+ Refatoração de IFilter<TEntity>
+ Refatoração total de IRepository, IService e ServiceBase;
+ Adicionadas props Tag ResultTypeDescription em ApiResult;
+ Adicionado service HttpClientBase para requisições HTTP.
BREAKING CHANGES:
+ IFilter<TEntity>:
- ExtendedExpressions renomeado para Expressions;
- Remoção de método ToExpression();
+ IEntityReadService, IReadService e IWriteService substituídos por versões de IService;