Översikt
IRM.dll har basfunktionalitet inom följande områden:
- Collections: ImmutableCollection (en read-only collection), RecentSet (en kollektion för att hålla reda på senaste av något, t.ex. senaste öppnade kunder, senaste öppnade dokument), TreeNode (struktur för att bygga upp ett träd).
- ComponentModel: ObservableObject (basklass som implementerar INotifyPropertyChanged), SortableBindingList (en BindingList som är sorterbar, typiskt använd i WPF, Silverlight, mm) och ValidatingDataTransferObject (utökar ObservableObject med stöd för att validera ett objekt, dvs se om alla attribut är uppfyllda, och implementerar IDataErrorInfo)
- ComponentModel.DataAnnotations Innehåller ett flertal olika valideringsattribut som är användbara i många applikationer.
- Data: Utökat stöd för att jobba med DataReader och DataSet. Mest användbart nu för tiden är stödet för DataReader som ibland behöver användas för att få tillräcklig prestanda eller för att kunna hantera större datamängder, t.ex. i kombination med SQL Bulk Copy. Det finns t.ex. GenericListDataReader som får vilken List
som helst att se ut som en DataReader, MappingDataReader som kan användas för att mappa från ett format till ett annat och CsvDataReader som kan hantera lite olika typer av csv-filer som en DataReader. - Data.SqlClient: Det mest användbara här är kanske enumen SqlErrorNumber som har alla de vanligaste SQL Server felen tillgängliga med ett namn istället för att du ska behöva slå upp numret för olika fel. Utöver detta finns det en CommandParameterCache.
- Data.Migrations: Har ett enkelt stöd för att skapa SQL-baserade migreringar (alltså när man inte använder Entity Framework). Detta används primärt av några andra Application Blocks.
- Dependencies: Primärt grundläggande stöd för att överiga IRM-komponenter inte ska behöva vara beroende av något specifikt DI-ramverk.
- Diagnostics (bara .NET Framework): Stödklasser för att skapa egna Performance Counters.
- Domain: Grundläggande stöd för att skapa domänmodeller, men även färdiga implementationer för länder, postnummer, sni-koder, svenska län och kommuner.
- Domain.Persistance: Grundläggande stöd för Event Sourcing. Används primärt av IRM.Messaging och IRM.MessagingCore.
- Domain.Tests: Stödklasser för att underlätta tester enligt GIVEN-WHEN-THEN, samt stöd för att utifrån sådana tester kunna generera dokumentation som går att läsa av verksamhetspersoner.
- Globalization: Grundläggande stöd för att kunna hantera vilka språk en applikation har stöd för. Används av IRM.AspNetCore.Mvc.
- IdentityModel: Eftersom man inte kan använda Thread.CurrentPrincipal i .NET Core så finns här IPrincipalAccessor respektive ITenantAccessor med olika implementation för att kunna komma åt information om en användare respektive en tenant (ägare).
- IdentityModel.Claims: Extension-metoder för IPrincipal/IIdentity för att enkelt komma åt ett antal vanliga claims värden. ClaimTypes har ett antal konstanter för vanliga typer av claims.
- Mail: Definierar IEmailSender och har en default implementation DefaultEmailSender. Detta gör det enkelt att skicka mail med hjälp av SmtpClient, men på ett säkert sätt. Det finns stöd för att begränsa vilka domäner e-post får skickas till eller för att byta ut alla adresser till en specifik adress samt enkelt lägga alla mail på disk istället för att skicka dem. Allt detta är väldigt bra under utveckling och test. Implementationen sätter också ett antal egenskaper för att göra så att mailen ser bättre ut i olika typer av applikationer som hanterar e-post.
- Messaging:
- Net: Här finns en FtpClient.
- Net.Http: Här finns logik för att utifrån en UserAgent-sträng få information om vad det är för webbläsare, operativsystem och typ av enhet som använts.
- Net.Sockets: Stöd för att upptäcka om ett socket-fel är av sådan typ att det går att göra ett nytt försök.
- Reflection: AssemblyInfo för att få ut vanlig information som versionsnummer, mm. TypeLoader som gör det möjligt att få fram en Type utifrån ett namn. ReflectionExtensions som gör det enklare med ett antal vanliga operationer när man jobbar med Reflection.
- Security.Cryptography: HashExtensions gör det enkelt att skapa hash-värden för olika algoritmer och AesThenHmac implementerar stöd för just AesThenHmac algoritmen.
- TransientFaultHandling: Stöd för att exekvera operationer i något som kan köras om vid de tillfällen som det inträffade felet är möjligt att köra om. Baserat på det stöd för Entity Framework som gör att operationer mot SLQ Server körs om beroende på vad det är för typ av fel. Detta kan t.ex. användas för att säkra att ett mail skickas i kombination med SocketTransientExceptionDetector.
- Windows: SingleInstance hjälper dig att säkra att endast en instans av en windows-applikation körs.
- Xml: Stöd för att konvertera till/från DataSet och Diffgram/XmlElement. Grundstöd för att skapa dokumentaiton.
Root-namepacet innehåller att antal vanliga utility-klasser:
- ICallContext/DefaultCallContext: Vårt rekommenderade sätt att flöda information om användare och annat mellan trådar i .NET Core.
- DateTimeExtension: Första/sista dagen i en månad, nästa dag, nästa veckodag, arbetsdagar på olika sätt som hanterar svenska helgdagar, formatering i olika former inkl. relativa (t.ex. "några minuter sedan", "en timme sedan", "igår", osv) och min/max av två datum.- EnumFlagExtensions: Gör det enklare att jobba med enums som är flaggor.
- GuidExtensions: Tar fram sekventiella GUIDs som lämpar sig för lagring utan att få prestandaförluster.
- LongExtensions: Stöd för att lägga till kontrollsiffror och att kontrollera dem.
- QueryableExtensions: Hanterar Paging, Sorting, Filtering och Aggregaring av Query.
- StringExtensions: Kan verifira olika typer av strängar, t.ex. personnummer, orgnr, mfl.
- UriExtensions: Gör det enkelt att hantera Query-parametrar.
- Fel av lite olika varianter: ApplicationException, BusinessRuleException (med stöd för DataSet). Detta är mest att betrakta som obsolete.