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);
}
}