diff --git a/src/libraries/System.Composition.AttributedModel/src/PACKAGE.md b/src/libraries/System.Composition.AttributedModel/src/PACKAGE.md new file mode 100644 index 00000000000000..57bbc8bf0329b7 --- /dev/null +++ b/src/libraries/System.Composition.AttributedModel/src/PACKAGE.md @@ -0,0 +1,140 @@ +## About + + + +`System.Composition.AttributedModel` is part of the Managed Extensibility Framework (MEF) 2.0, a composition library for .NET that enables dependency injection through attributes or conventions. + +This package provides the foundational attributes that allow you to declare parts for composition, such as imports, exports, and metadata. +It is used to mark classes, properties, methods, and constructors for MEF's discovery and composition process. + +## Key Features + + + +* Provides attributes for declaring composable parts, importing dependencies, metadata, and creating shared or non-shared parts + +## How to Use + + + +Mark classes for export and import using attributes. + +```csharp +using System.Composition; +using System.Composition.Hosting; + +var configuration = new ContainerConfiguration() + .WithPart() + .WithPart(); + +using CompositionHost container = configuration.CreateContainer(); + +Application app = container.GetExport(); +app.Service.Execute(); +// Service is running! + +[Export] +public class Application +{ + [Import] + public Service Service { get; set; } +} + +[Export] +public class Service +{ + public void Execute() => Console.WriteLine("Service is running!"); +} +``` + +Metadata can be used to differentiate between multiple exports of the same contract. + +```csharp +using System.Composition; +using System.Composition.Hosting; + +ContainerConfiguration configuration = new ContainerConfiguration() + .WithPart() + .WithPart() + .WithPart(); + +using CompositionHost container = configuration.CreateContainer(); + +Application app = container.GetExport(); +app.Run(); +// Using FileLogger to log. +// FileLogger: Hello, World! +// Using ConsoleLogger to log. +// ConsoleLogger: Hello, World! + +public interface ILogger +{ + void Log(string message); +} + +[Export(typeof(ILogger))] +[ExportMetadata("Name", "FileLogger")] +public class FileLogger : ILogger +{ + public void Log(string message) => Console.WriteLine($"FileLogger: {message}"); +} + +[Export(typeof(ILogger))] +[ExportMetadata("Name", "ConsoleLogger")] +public class ConsoleLogger : ILogger +{ + public void Log(string message) => Console.WriteLine($"ConsoleLogger: {message}"); +} + +[Export] +public class Application +{ + [ImportMany] + public required IEnumerable>> Loggers { get; set; } + + public void Run() + { + foreach (var logger in Loggers) + { + var name = logger.Metadata["Name"]; + + Console.WriteLine($"Using {name} to log."); + logger.Value.Log("Hello, World!"); + } + } +} +``` + +## Main Types + + + +The main types provided by this library are: + +* `System.Composition.ExportAttribute` +* `System.Composition.ImportAttribute` +* `System.Composition.ExportMetadataAttribute` + +## Additional Documentation + + + +* [API documentation](https://learn.microsoft.com/dotnet/api/system.composition) +* [Managed Extensibility Framework (MEF)](https://learn.microsoft.com/dotnet/framework/mef/) + +## Related Packages + + + +* [System.Composition](https://www.nuget.org/packages/System.Composition) +* [System.Composition.Convention](https://www.nuget.org/packages/System.Composition.Convention) +* [System.Composition.Hosting](https://www.nuget.org/packages/System.Composition.Hosting) +* [System.Composition.Runtime](https://www.nuget.org/packages/System.Composition.Runtime) +* [System.Composition.TypedParts](https://www.nuget.org/packages/System.Composition.TypedParts) + +## Feedback & Contributing + + + +System.Composition.AttributedModel is released as open source under the [MIT license](https://licenses.nuget.org/MIT). +Bug reports and contributions are welcome at [the GitHub repository](https://github.com/dotnet/runtime). diff --git a/src/libraries/System.Composition.AttributedModel/src/System.Composition.AttributedModel.csproj b/src/libraries/System.Composition.AttributedModel/src/System.Composition.AttributedModel.csproj index 21e5bd32d21de9..44856544cf5ddf 100644 --- a/src/libraries/System.Composition.AttributedModel/src/System.Composition.AttributedModel.csproj +++ b/src/libraries/System.Composition.AttributedModel/src/System.Composition.AttributedModel.csproj @@ -5,17 +5,10 @@ Microsoft false true - Provides common attributes used by System.Composition types. - -Commonly Used Types: -System.Composition.ExportAttribute -System.Composition.ImportAttribute -System.Composition.Convention.AttributedModelProvider + Provides the foundational attributes that allow you to declare parts for composition, such as imports, exports, and metadata with the Managed Extensibility Framework (MEF). disable $(NoWarn);nullable - - false