Shows how the Type attribute can declare a contract directly on an implementation type.
using Shouldly;
using Pure.DI;
DI.Setup(nameof(Composition))
// Composition root
.Root<IMessageWriter>("Writer");
var composition = new Composition();
var writer = composition.Writer;
writer.ShouldBeOfType<ConsoleMessageWriter>();
interface IMessageWriter;
[Type(typeof(IMessageWriter))]
class ConsoleMessageWriter : IMessageWriter;Running this code sample locally
- Make sure you have the .NET SDK 10.0 or later installed
dotnet --list-sdk- Create a net10.0 (or later) console application
dotnet new console -n Sampledotnet add package Pure.DI
dotnet add package Shouldly- Copy the example code into the Program.cs file
You are ready to run the example 馃殌
dotnet runNote
When a registered type attribute is applied to a class or struct, Pure.DI treats it as binding metadata for that implementation.
The following partial class will be generated
partial class Composition
{
public IMessageWriter Writer
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
return new ConsoleMessageWriter();
}
}
}Class diagram:
---
config:
class:
hideEmptyMembersBox: true
---
classDiagram
ConsoleMessageWriter --|> IMessageWriter
Composition ..> ConsoleMessageWriter : IMessageWriter Writer
namespace Pure.DI.UsageTests.Attributes.BindTypeAttributeScenario {
class Composition {
<<partial>>
+IMessageWriter Writer
}
class ConsoleMessageWriter {
<<class>>
+ConsoleMessageWriter()
}
class IMessageWriter {
<<interface>>
}
}
See also: