Inhalt
XML Konfiguration
Die Abhängigkeiten, Argumente und weitere Angaben können per Xml deklariert werden,
dabei ergibt sich der Vorteil, das die Konfiguration ohne Neukompilierung austauschbar ist.
Ein Nachteil ist allerdings die fehlende Typisierung, womit also durch Schreibfehler, Laufzeitfehler auftreten können.
Syntax
In der Xml-Syntax ist mit Ausnahme von Delegaten / Lambda Expression und geschlossenen generischen Typen alles enthalten, was per Code auch konfigurierbar ist.
LightCore kann Xml aus einer Standard .NET-Konfigurationsdatei auslesen (app.config oder web.config).
Dafür braucht es die Angabe des Sectionhandlers von LightCore in der Konfigurationsdatei.
Wichtig ist hierbei auch, dass die Section als Namen LightCoreConfiguration trägt.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="LightCoreConfiguration" type="LightCore.Configuration.XamlConfigSectionHandler, LightCore.Configuration" />
</configSections>
Anschliessend eine Beispielkonfiguration:
<LightCoreConfiguration xmlns="clr-namespace:LightCore.Configuration;assembly=LightCore.Configuration">
<LightCoreConfiguration.TypeAliases>
<TypeAlias Alias="HttpRequest" Type="LightCore.Integration.Web.Lifecycle.HttpRequestLifecycle, LightCore.Integration.Web" />
</LightCoreConfiguration.TypeAliases>
<LightCoreConfiguration.Registrations>
<Registration ContractType="LightCore.TestTypes.IRepository{2}, LightCore.TestTypes" ImplementationType="LightCore.TestTypes.Repository{2}, LightCore.TestTypes" />
<Registration ContractType="LightCore.TestTypes.IFoo" ImplementationType="LightCore.TestTypes.Foo">
<Registration.Arguments>
<Argument Value="Alexander" />
<Argument Value="44" Type="int" Name="AgeProperty"/>
<Argument Value="true" Type="bool" />
</Registration.Arguments>
</Registration>
</LightCoreConfiguration.Registrations>
<LightCoreConfiguration.RegistrationGroups>
<RegistrationGroup Name="Real">
<RegistrationGroup.Registrations>
<Registration ContractType="System.ComponentModel.IDisposable" ImplementationType="System.IO.Stream, mscorlib"/>
</RegistrationGroup.Registrations>
</RegistrationGroup>
<RegistrationGroup Name="Fake">
<RegistrationGroup.Registrations>
<Registration ContractType="System.ComponentModel.IDisposable" ImplementationType="MyDisposableType, MyProject"/>
</RegistrationGroup.Registrations>
</RegistrationGroup>
</LightCoreConfiguration.RegistrationGroups>
</LightCoreConfiguration>
Offene generische Typen
Offene generische Typen können entweder in der normalen .NET Syntax:
"LightCore.TestTypes.Repository`2, LightCore.TestTypes"
oder aber über die vereinfachte Variante von LightCore registriert werden:
"LightCore.TestTypes.Repository{2}, LightCore.TestTypes"
Dabei gibt die Zahl an, wieviele Typparameter der Typ hat, bspw. Repository<Foo, int>.
Aliase
Ein Konzept bei der Konfiguration per Xml ermöglicht es, Aliase für Typen zu definieren.
Das hilft vorallem bei viel genutzten Typen, wie beispielsweise den Lifecylces von LightCore, oder auch
wenn ein Typ zwei mal angegeben muss, was in einer bessere Wartbarkeit resultiert.
Folgende Aliases sind standardmässig schon registriert und können sofort genutzt werden:
Type Aliases
Wird für die Argumente einer Registration benötigt, um den Typ anzugeben.
| Alias |
Typ |
| Int32, Integer, int |
System.Int32, mscorlib |
| String, string |
System.String, mscorlib |
| Boolean, bool |
System.Boolean, mscorlib |
| Guid |
System.Guid, mscorlib |
Lifecycle Type Aliases
Wird benötigt um den DefaultLifecycle anzugeben (Siehe oben), oder aber den Lifecycle
für eine Registration.
(Der HttpRequestLifecycle befindet sich in der LightCore.Integration.Web.dll und muss daher manuell nachgetragen werden, siehe [Link] LightCore in Webanwendungen).
Typen müssen im Xml an jeder Stelle entweder durch einen Alias oder vollqualifiziert angegeben werden.
Beispiel: "Name.Space.Class, Assembly" => "LightCore.Lifecycle.SingletonLifecycle, LightCore".
| Alias |
Typ |
| Transient |
LightCore.Lifecycle.TransientLifecycle, LightCore
|
| Singleton |
LightCore.Lifecycle.SingletonLifecycle, LightCore
|
| ThreadSingleton |
LightCore.Lifecycle.ThreadSingletonLifecycle, LightCore
|
LightCoreConfiguration Attribute
| Attribut Name |
Beschreibung |
Gültige Werte |
| ActiveRegistrationGroups |
Optionales Attribut, womit angegeben werden kann, welche RegistrationGroups
benutzt werden sollen (Also aktiv sind und registriert werden).
|
Gruppennamen die in Benutzung sind, einer oder mehrere durch Komma getrennt: "Xml", oder "Xml, Utils". |
| DefaultLifecycle |
Optionales Attribut über das der Standard-Lebenszyklus für die Registrierungen steuert. |
Alias oder eine vollqualifizierte Typangabe für einen Lifecycle. |
TypeAlias Attribute
| Attribut Name |
Beschreibung |
Gültige Werte |
| Alias |
Gibt den Aliasnamen an, der später benutzt werden kann. |
Einen beliebigen String. |
| Type |
Typangabe die später anstelle des Aliases genutzt wird. |
Eine vollqualifizierte Angabe, beispielsweise: "LightCore.Lifecycle.SingletonLifecycle, LightCore". |
Registration Attribute
Eine Registration kann Argumente enthalten und eine RegistrationGroup Registrationen und wiederum Argumente.
| Attribut Name |
Beschreibung |
Gültige Werte |
| ContractType |
Alias für einen Typen oder vollqualifizierte Typangabe, die den Kontrakt angibt. |
Eine vollqualifizierte Angabe, beispielsweise: "TestProject.IFoo, TestProject". |
| ImplementationType |
Alias für einen Typen oder vollqualifizierte Typangabe, die die Implementation angibt. |
Eine vollqualifizierte Angabe, beispielsweise: "TestProject.Foo, TestProject". |
| Lifecycle |
Optionales Attribut über das der Standard-Lebenszyklus für die Registrierungen steuert. |
Alias oder eine vollqualifizierte Typangabe für einen Lifecycle. |
| Enabled |
Optionales Attribut das die Registrierung aktiviert oder deaktivier (Standardmässig aktiviert). |
true oder false. |
RegistrationGroup Attribute
| Attribut Name |
Beschreibung |
Gültige Werte |
| Name |
Einen Namen für die Registrationsgruppe. |
Einen beliebigen String. |
| Enabled |
Optionales Attribut das die Registrierung aktiviert oder deaktivier (Standardmässig aktiviert). |
true oder false. |
LightCore für Xml-Quelle konfigurieren
LightCore stellt über ein RegistrationModule (siehe: Erweiterbarkeit), in der Assembly LightCore.Configuration.dll,
die Möglichkeit zur Verfügung, eine oder mehrere Konfigurationen aus:
-
der app.config / web.config
var builder = new ContainerBuilder();
RegistrationModule xamlModule = new XamlRegistrationModule();
builder.RegisterModule(xamlModule);
-
den Dateinamen mit dem Xml-Inhalt
var builder = new ContainerBuilder();
string configurationFilePath = "LightCore-Configuration.xml";
RegistrationModule xamlModule = new XamlRegistrationModule(configurationFilePath);
builder.RegisterModule(xamlModule);
-
einer Stream-Instanz die das Xml enthält (Beispielsweise aus einer Datenbank)
var builder = new ContainerBuilder();
Stream configurationStream = GetStreamFromDatabase();
RegistrationModule xamlModule = new XamlRegistrationModule(configurationStream);
builder.RegisterModule(xamlModule);
Alle Möglichkeiten zur Registrierung sind beliebig und beliebig oft kombinierbar.