MessageDescriptionsBase
MessageDescriptionsBase can be used as base class for IMessageDescriptions.
var messages = new LibraryMessages1().ReadSummaryXmls();
WriteLine(messages.BadUnexpected.New("Obj"));
public class LibraryMessages1 : MessageDescriptionsBase
{
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error");
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'");
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok");
}
Key | StatusCode | Description | Message Template | Exception |
---|---|---|---|---|
LibraryMessages1:BadArgumentNull | Captured unexpected Exception. | '{object}': Argument 'null' | ||
LibraryMessages1:BadUnexpected | Captured unexpected Exception. | '{object}': Unexpected error | ||
LibraryMessages1:GoodResult | Good result. | '{object}': Ok |
Constructor 'baseCode: 0x20A10000' give base code for lines. It is summed to 'codePartial:' of each line.
var messages = new LibraryMessages2().ReadSummaryXmls();
WriteLine(messages.BadUnexpected.New("Obj"));
public class LibraryMessages2 : MessageDescriptionsBase
{
public LibraryMessages2() : base(baseCode: 0x20A10000) { }
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error", codePartial: 1 + 0x80000000);
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'", codePartial: 2 + 0x80000000);
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok", codePartial: 3);
}
Key | StatusCode | Description | Message Template | Exception |
---|---|---|---|---|
LibraryMessages2:BadUnexpected | A0A10001 | Captured unexpected Exception. | '{object}': Unexpected error | |
LibraryMessages2:BadArgumentNull | A0A10002 | Captured unexpected Exception. | '{object}': Argument 'null' | |
LibraryMessages2:GoodResult | 20A10003 | Good result. | '{object}': Ok |
The 'code:' assigns absolute code.
var messages = new LibraryMessages3().ReadSummaryXmls();
WriteLine(messages.BadUnexpected.New("Obj"));
public class LibraryMessages3 : MessageDescriptionsBase
{
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error", code: 0xA0A10001);
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'", code: 0xA0A10002);
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok", code: 0x20A10003);
}
Key | StatusCode | Description | Message Template | Exception |
---|---|---|---|---|
LibraryMessages3:BadUnexpected | A0A10001 | Captured unexpected Exception. | '{object}': Unexpected error | |
LibraryMessages3:BadArgumentNull | A0A10002 | Captured unexpected Exception. | '{object}': Argument 'null' | |
LibraryMessages3:GoodResult | 20A10003 | Good result. | '{object}': Ok |
'tableName: LibraryMessages' assigns table name. 'codeToHash: true' instructs to create consistent 16-bit hash from the key.
var messages = new LibraryMessages4().ReadSummaryXmls();
WriteLine(messages.BadUnexpected.New("Obj"));
public class LibraryMessages4 : MessageDescriptionsBase
{
public LibraryMessages4() : base(tableName: "LibraryMessages", baseCode: 0x20A10000) { }
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error", codeToHash: true, codePartial: 0x80000000);
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'", codeToHash: true, codePartial: 0x80000000);
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok", codeToHash: true);
}
Key | StatusCode | Description | Message Template | Exception |
---|---|---|---|---|
LibraryMessages:BadArgumentNull | A0A14892 | Captured unexpected Exception. | '{object}': Argument 'null' | |
LibraryMessages:BadUnexpected | A0A19B00 | Captured unexpected Exception. | '{object}': Unexpected error | |
LibraryMessages:GoodResult | 20A1FB00 | Good result. | '{object}': Ok |
LocalizedMessageDescriptionsBase creates localized version of each IMessageDescription.
// Create localization
ILocalization localization = new Localization()
.AddLine("fi", "LibraryMessages:BadUnexpected", "BraceAlphaNumeric", "'{object}': Odottamaton virhe")
.AddLine("fi", "LibraryMessages:BadArgumentNull", "BraceAlphaNumeric", "'{object}': 'null' argumentti")
.AddLine("fi", "LibraryMessages:GoodResult", "BraceAlphaNumeric", "'{object}': Ok");
// Create messages table
var messages = new LibraryMessages5(localization).ReadSummaryXmls();
// Print message
CultureInfo culture = CultureInfo.GetCultureInfo("fi-FI");
WriteLine(messages.BadUnexpected.New("Obj").Print(culture)); // 'Obj': Odottamaton virhe
WriteLine(messages.BadUnexpected.New("Obj").Print(null)); // 'Obj': Unexpected error
public class LibraryMessages5 : LocalizedMessageDescriptionsBase
{
public LibraryMessages5(ILocalization? localization = default, ICultureProvider? cultureProvider = default) : base(localization, cultureProvider, tableName: "LibraryMessages", baseCode: 0xA0A10000) { }
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error");
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'");
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok");
}
Key | StatusCode | Description | Message Template | Exception |
---|---|---|---|---|
LibraryMessages:BadArgumentNull | Captured unexpected Exception. | '{object}': Argument 'null' | ||
LibraryMessages:BadUnexpected | Captured unexpected Exception. | '{object}': Unexpected error | ||
LibraryMessages:GoodResult | Good result. | '{object}': Ok |
MessageDescriptionsBase is typically used as nested inner class of another class.
[ServiceDescriptor<MyService>]
public class MyService
{
[ServiceDescriptor<Messages>]
[ServiceDescriptorAs<IMessageDescriptions, Messages>]
public class Messages : LocalizedMessageDescriptionsBase
{
public Messages(ILocalization? localization = default, ICultureProvider? cultureProvider = default) : base(localization, cultureProvider) { }
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error");
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'");
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok");
}
Messages messages;
public MyService(Messages messages)
{
this.messages = messages;
}
}
Full Example
Full example
using System.Globalization;
using Avalanche.DependencyInjection;
using Avalanche.Localization;
using Avalanche.Message;
using static System.Console;
class messagedescriptionsbase
{
public static void Run()
{
{
// <01>
var messages = new LibraryMessages1().ReadSummaryXmls();
WriteLine(messages.BadUnexpected.New("Obj"));
// </01>
WriteLine(messages);
}
{
// <02>
var messages = new LibraryMessages2().ReadSummaryXmls();
WriteLine(messages.BadUnexpected.New("Obj"));
// </02>
WriteLine(messages);
}
{
// <03>
var messages = new LibraryMessages3().ReadSummaryXmls();
WriteLine(messages.BadUnexpected.New("Obj"));
// </03>
WriteLine(messages);
}
{
// <04>
var messages = new LibraryMessages4().ReadSummaryXmls();
WriteLine(messages.BadUnexpected.New("Obj"));
// </04>
WriteLine(messages);
}
{
// <05>
// Create localization
ILocalization localization = new Localization()
.AddLine("fi", "LibraryMessages:BadUnexpected", "BraceAlphaNumeric", "'{object}': Odottamaton virhe")
.AddLine("fi", "LibraryMessages:BadArgumentNull", "BraceAlphaNumeric", "'{object}': 'null' argumentti")
.AddLine("fi", "LibraryMessages:GoodResult", "BraceAlphaNumeric", "'{object}': Ok");
// Create messages table
var messages = new LibraryMessages5(localization).ReadSummaryXmls();
// Print message
CultureInfo culture = CultureInfo.GetCultureInfo("fi-FI");
WriteLine(messages.BadUnexpected.New("Obj").Print(culture)); // 'Obj': Odottamaton virhe
WriteLine(messages.BadUnexpected.New("Obj").Print(null)); // 'Obj': Unexpected error
// </05>
WriteLine(messages);
}
{
// <06>
// </06>
}
}
}
// <101>
public class LibraryMessages1 : MessageDescriptionsBase
{
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error");
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'");
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok");
}
// </101>
// <102>
public class LibraryMessages2 : MessageDescriptionsBase
{
public LibraryMessages2() : base(baseCode: 0x20A10000) { }
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error", codePartial: 1 + 0x80000000);
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'", codePartial: 2 + 0x80000000);
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok", codePartial: 3);
}
// </102>
// <103>
public class LibraryMessages3 : MessageDescriptionsBase
{
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error", code: 0xA0A10001);
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'", code: 0xA0A10002);
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok", code: 0x20A10003);
}
// </103>
// <104>
public class LibraryMessages4 : MessageDescriptionsBase
{
public LibraryMessages4() : base(tableName: "LibraryMessages", baseCode: 0x20A10000) { }
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error", codeToHash: true, codePartial: 0x80000000);
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'", codeToHash: true, codePartial: 0x80000000);
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok", codeToHash: true);
}
// </104>
// <105>
public class LibraryMessages5 : LocalizedMessageDescriptionsBase
{
public LibraryMessages5(ILocalization? localization = default, ICultureProvider? cultureProvider = default) : base(localization, cultureProvider, tableName: "LibraryMessages", baseCode: 0xA0A10000) { }
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error");
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'");
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok");
}
// </105>
// <106>
[ServiceDescriptor<MyService>]
public class MyService
{
[ServiceDescriptor<Messages>]
[ServiceDescriptorAs<IMessageDescriptions, Messages>]
public class Messages : LocalizedMessageDescriptionsBase
{
public Messages(ILocalization? localization = default, ICultureProvider? cultureProvider = default) : base(localization, cultureProvider) { }
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadUnexpected = new Line("'{object}': Unexpected error");
/// <summary>Captured unexpected <see cref="System.Exception"/>.</summary>
public readonly IMessageDescription BadArgumentNull = new Line("'{object}': Argument 'null'");
/// <summary>Good result.</summary>
public readonly IMessageDescription GoodResult = new Line("'{object}': Ok");
}
Messages messages;
public MyService(Messages messages)
{
this.messages = messages;
}
}
// </106>