Consultores danieloliveira-mm Postado 18 Fevereiro Consultores Postado 18 Fevereiro Projeto ACBr está refatorando as classes ACBrLib C# Olá comunidade ! O Projeto ACBr iniciou a refatoração das classes de alto nível em C#, mantendo a compatibilidade com o .NET 4.5 As mudanças ocorrerão ao longo do ano de 2026. Principais mudanças Desacoplamento usando interfaces: agora cada classe de alto nível terá sua interface (IACBrLibCEP, IACBrLibNFe, ...); Uso da interface IACBrLibBase; Substituição da classe ACBrLibHandle por ACBrLibBase; ACBrLibHandle será depreciada e removida Remoção do selamento das classes ACBrLib Programas exemplo: Os demos terão pastas de build (output) próprias para ST e MT; Serão atualizados para .NET. 4.8. Exemplo: // Pasta de saída para demo MT trunk2\Projetos\ACBrLib\Demos\C#\Mail\Demo\ACBrLibMail.Demo\bin\MT\Debug // Pasta de saída para demo ST trunk2\Projetos\ACBrLib\Demos\C#\Mail\Demo\ACBrLibMail.Demo\bin\ST\Debug Fases da refatoração Obs.: Até a presente data, 02/03/2026 concluímos a fase II Fase I Refatoração da ACBrLib.Core com inclusão da classe ACBrLibBase e da interface IACBrLibBase. Além disso, foram expostos os métodos `Inicializar`,`Finalizar` e `OpenSSLInfo` nas classes ST e MT. Nessa fase, foi adicionada uma camada de compatibilidade entre as classes filhas de ACBrLibHandle e ACBrLibBase. Fase II Classes filhas de ACBrLibHandleBase carregarão a ACBrLib em modo thread safe. Refatoração das classes MT mais usadas; Inclusão das interfaces IACBrLib. Lista atualizada em 02/03/2026 Já foram atualizados: ACBrNFe; ACBrNFSe; ACBrCEP; ACBrMDFe; ACBrPIXCD; ACBrPosPrinter; ACBrBAL; ACBrBoleto; ACBrConsultaCNPJ; ACBrCTe; ACBrGTIN; ACBrETQ; ACBrIBGE; ACBrReinf; ACBrNCMs; ACBrMail; PIXMatera; Sedex. ACBrPosPrinter Agora, o método Inicializar é responsável por instanciar o componente! Método usado para preparar o buffer para impressão agora é InicializarPos(). Essa alteração visa corrigir a ambiguidade causada pelos argumentos opcionais do método Inicializar(): public interface IACBrLibBase { // permite a chamada sem argumentos, exemplo: Inicializar(); void Inicializar(string eArquivoConfig = "", string eChaveCrypt= ""); } Exemplo: //versões anteriores a 1.0.9 ACBrPosPrinter pos = new ACBrPosPrinter("[Memory]", ""); pos.Inicializar(); // metódo antigo (inicializar buffer) // ACBrLib.PosPrinter >=v1.0.9 ACBrPosPrinter pos = new ACBrPosPrinter("[Memory]", ""); pos.InicializarPos(); ACBrReinf Outra modificação importante aconteceu em ACBrReinf, na interface IACBrLibReinf o método para configurar o TipoContribuinte é SetTipoContribuinte. Exemplo: // versões anteriores a 1.0.8 ACBrReinf reinf = new ACBrReinf("",""); reinf.TipoContribuinte(cmbTipoContribuinte.SelectedIndex); IACBrLibReinf reinf = new ACBrReinf("",""); reinf.SetTipoContribuinte(cmbTipoContribuinte.SelectedIndex); // >= 1.0.8 Depreciados ACBrSAT e ACBrSATMT foram depreciados. O código fonte e o programa exemplo dessa classe serão removidos na fase V. Exemplo: // exemplo de uso IACBrLibCEP cep = new ACBrLibCEP("[Memory]", ""); Fase III Atualização da interface IACBrLibBase para incluir os métodos Nome(), Versao() e UltimoRetorno(). Nessa fase, serão removidos os campos ( fields / properties ) `Nome` e `Versao` das classes ST Exemplo: ACBrNFe nfe = new ACBrNFe("[Memory]", ""); Console.WriteLine(nfe.Nome); // Removido // Novo método: IACBrLibNFe nfe = new ACBrNFe("[Memory]", ""); Console.WriteLine(nfe.Nome()); Fase IV Descontinuação da classe ACBrLibHandle. Fase V Separação dos pacotes ACBrLibX.Common com recursos compartilhados em ST e MT, incluindo a interface IACBrLibX; Nessa fase, os pacotes serão publicados com a versão 2.0.0; Recursos compartilhados, como interfaces, classes de resposta e de notas fiscais, terão seu próprio pacote; A chamada do método `Inicializar` será obrigatória após instanciar a ACBrLib. Exemplo: using ACBrLib.NFe; using ACBrLib.NFe.Common; IACBrLibNFe nfe = new ACBrNFe("[Memory]", ""); try { nfe.Inicializar(); } catch (Exception e) { // tratamento de erro } Exemplo de recurso compartilhado: using ACBrLib.Core; namespace ACBrLib.NFe.Common { public interface IACBrLibNFe : IACBrLibBase { ACBrNFeConfig Config { get; } void CarregarNota(NotaFiscal nfe); } } 8 1
Recommended Posts