Skip to content

Commit e9b9b98

Browse files
author
Nikolay Pianikov
committed
Update README
1 parent 351d856 commit e9b9b98

153 files changed

Lines changed: 457 additions & 765 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ Let's bind the abstractions to their implementations and set up the creation of
105105
DI.Setup(nameof(Composition))
106106
// Models a random subatomic event that may or may not occur
107107
.Bind().As(Singleton).To<Random>()
108-
// Represents a quantum superposition of two states: Alive or Dead
108+
// Represents a quantum state: Alive or Dead, decided at observation time
109109
.Bind().To((Random random) => (State)random.Next(2))
110110
.Bind().To<ShroedingersCat>()
111111
// Cardboard box with any contents
@@ -117,7 +117,7 @@ DI.Setup(nameof(Composition))
117117
> [!NOTE]
118118
> In fact, the `Bind().As(Singleton).To<Random>()` binding is unnecessary since Pure.DI supports many .NET BCL types out of the box, including [Random](https://github.com/DevTeam/Pure.DI/blob/27a1ccd604b2fdd55f6bfec01c24c86428ddfdcb/src/Pure.DI.Core/Features/Default.g.cs#L289). It was added just for the example of using the _Singleton_ lifetime.
119119
120-
The code above specifies the generation of a partial class named *__Composition__*. This name is defined in the `DI.Setup(nameof(Composition))` call. The class contains a *__Root__* property that returns an object graph with an object of type *__Program__* as the root. The type and name of the property are defined by calling `Root<Program>("Root")`. The generated code looks like this:
120+
The code above specifies the generation of a partial class named *__Composition__* — this name is defined in the `DI.Setup(nameof(Composition))` call. The call to `Root<Program>("Root")` then adds a property to that class whose type is *__Program__* and whose name is *__Root__*; this property returns the composed object graph. The generated code looks like this:
121121

122122
```c#
123123
partial class Composition
@@ -233,7 +233,7 @@ You can see the class diagram at any time by following the link in the comment o
233233

234234
</details>
235235

236-
This code does not depend on other libraries, does not use type reflection, and avoids tricks that can negatively affect performance and memory consumption. It looks like efficient code written by hand. At any given time, you can study it and understand how it works.
236+
This code does not depend on other libraries, does not use type reflection, and avoids tricks that can negatively affect performance and memory consumption. It reads like hand-written code: no reflection, no runtime container, no hidden allocations. At any given time, you can study it and understand how it works.
237237

238238
The `public Program Root { get; }` property is a [*__Composition Root__*](https://blog.ploeh.dk/2011/07/28/CompositionRoot/), the only place in the application where the composition of the object graph takes place. Each instance is created using basic language constructs, which compile with all optimizations and minimal impact on performance and memory consumption. In general, applications may have multiple composition roots and thus such properties. Each composition root must have its own unique name, which is defined when the `Root<T>(string name)` method is called, as shown in the code above.
239239

@@ -278,7 +278,7 @@ dotnet run
278278

279279
</details>
280280

281-
[An introductory article that will help you understand the basic idea and get started with Pure.DI](/readme/en_art_basics/en_basics.md)
281+
[An introductory article that will help you understand the basic idea and get started with Pure.DI](readme/en_art_basics/en_basics.md)
282282

283283
## Examples
284284

readme/ArrayDetails.md

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,32 @@ Creating an object graph of 27 transient objects, including 4 transient array ob
66
```mermaid
77
---
88
config:
9-
maxTextSize: 2147483647
10-
maxEdges: 2147483647
119
class:
1210
hideEmptyMembersBox: true
1311
---
1412
classDiagram
1513
Service1 --|> IService1
1614
Service2Array --|> IService2
1715
Service3 --|> IService3
18-
Service3v2 --|> IService3 : 2
19-
Service3v3 --|> IService3 : 3
20-
Service3v4 --|> IService3 : 4
16+
Service3v2 --|> IService3 : 2
17+
Service3v3 --|> IService3 : 3
18+
Service3v4 --|> IService3 : 4
2119
Service4 --|> IService4
2220
Array ..> CompositionRoot : CompositionRoot TestPureDIByCR()
23-
Service1 *-- Service2Array : IService2
24-
Service2Array *-- ArrayᐸIService3ᐳ : ArrayᐸIService3ᐳ
25-
Service3 *-- "2 " Service4 : IService4
26-
Service3v2 *-- "2 " Service4 : IService4
27-
Service3v3 *-- "2 " Service4 : IService4
28-
Service3v4 *-- "2 " Service4 : IService4
29-
CompositionRoot *-- Service1 : IService1
30-
CompositionRoot *-- "3 " Service2Array : IService2
31-
CompositionRoot *-- Service3 : IService3
32-
CompositionRoot *-- "2 " Service4 : IService4
33-
ArrayᐸIService3ᐳ *-- Service3 : IService3
34-
ArrayᐸIService3ᐳ *-- Service3v2 : 2 IService3
35-
ArrayᐸIService3ᐳ *-- Service3v3 : 3 IService3
36-
ArrayᐸIService3ᐳ *-- Service3v4 : 4 IService3
21+
Service1 *-- Service2Array : IService2
22+
Service2Array *-- ArrayᐸIService3ᐳ : ArrayᐸIService3ᐳ
23+
Service3 *-- "2 instances" Service4 : IService4
24+
Service3v2 *-- "2 instances" Service4 : IService4
25+
Service3v3 *-- "2 instances" Service4 : IService4
26+
Service3v4 *-- "2 instances" Service4 : IService4
27+
CompositionRoot *-- Service1 : IService1
28+
CompositionRoot *-- "3 instances" Service2Array : IService2
29+
CompositionRoot *-- Service3 : IService3
30+
CompositionRoot *-- "2 instances" Service4 : IService4
31+
ArrayᐸIService3ᐳ *-- Service3 : IService3
32+
ArrayᐸIService3ᐳ *-- Service3v2 : 2 IService3
33+
ArrayᐸIService3ᐳ *-- Service3v3 : 3 IService3
34+
ArrayᐸIService3ᐳ *-- Service3v4 : 4 IService3
3735
class ArrayᐸIService3ᐳ {
3836
<<array>>
3937
}

readme/EnumDetails.md

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,32 @@ Creating an object graph of 12 transient objects, including 1 transient enumerab
66
```mermaid
77
---
88
config:
9-
maxTextSize: 2147483647
10-
maxEdges: 2147483647
119
class:
1210
hideEmptyMembersBox: true
1311
---
1412
classDiagram
1513
Service1 --|> IService1
1614
Service2Enum --|> IService2
1715
Service3 --|> IService3
18-
Service3v2 --|> IService3 : 2
19-
Service3v3 --|> IService3 : 3
20-
Service3v4 --|> IService3 : 4
16+
Service3v2 --|> IService3 : 2
17+
Service3v3 --|> IService3 : 3
18+
Service3v4 --|> IService3 : 4
2119
Service4 --|> IService4
2220
Enum ..> CompositionRoot : CompositionRoot TestPureDIByCR()
23-
Service1 *-- Service2Enum : IService2
21+
Service1 *-- Service2Enum : IService2
2422
Service2Enum o-- "PerBlock" IEnumerableᐸIService3ᐳ : IEnumerableᐸIService3ᐳ
25-
Service3 *-- "2 " Service4 : IService4
26-
Service3v2 *-- "2 " Service4 : IService4
27-
Service3v3 *-- "2 " Service4 : IService4
28-
Service3v4 *-- "2 " Service4 : IService4
29-
CompositionRoot *-- Service1 : IService1
30-
CompositionRoot *-- "3 " Service2Enum : IService2
31-
CompositionRoot *-- Service3 : IService3
32-
CompositionRoot *-- "2 " Service4 : IService4
33-
IEnumerableᐸIService3ᐳ *-- Service3 : IService3
34-
IEnumerableᐸIService3ᐳ *-- Service3v2 : 2 IService3
35-
IEnumerableᐸIService3ᐳ *-- Service3v3 : 3 IService3
36-
IEnumerableᐸIService3ᐳ *-- Service3v4 : 4 IService3
23+
Service3 *-- "2 instances" Service4 : IService4
24+
Service3v2 *-- "2 instances" Service4 : IService4
25+
Service3v3 *-- "2 instances" Service4 : IService4
26+
Service3v4 *-- "2 instances" Service4 : IService4
27+
CompositionRoot *-- Service1 : IService1
28+
CompositionRoot *-- "3 instances" Service2Enum : IService2
29+
CompositionRoot *-- Service3 : IService3
30+
CompositionRoot *-- "2 instances" Service4 : IService4
31+
IEnumerableᐸIService3ᐳ *-- Service3 : IService3
32+
IEnumerableᐸIService3ᐳ *-- Service3v2 : 2 IService3
33+
IEnumerableᐸIService3ᐳ *-- Service3v3 : 3 IService3
34+
IEnumerableᐸIService3ᐳ *-- Service3v4 : 4 IService3
3735
namespace Pure.DI.Benchmarks.Benchmarks {
3836
class Enum {
3937
<<partial>>

readme/FuncDetails.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ Creating an object graph of 7 transition objects plus 1 `Func<T>` with additiona
66
```mermaid
77
---
88
config:
9-
maxTextSize: 2147483647
10-
maxEdges: 2147483647
119
class:
1210
hideEmptyMembersBox: true
1311
---
@@ -17,14 +15,14 @@ classDiagram
1715
Service3 --|> IService3
1816
Service4 --|> IService4
1917
Func ..> CompositionRoot : CompositionRoot TestPureDIByCR()
20-
Service1 *-- Service2Func : IService2
18+
Service1 *-- Service2Func : IService2
2119
Service2Func o-- "PerBlock" FuncᐸIService3ᐳ : FuncᐸIService3ᐳ
22-
Service3 *-- "2 " Service4 : IService4
23-
CompositionRoot *-- Service1 : IService1
24-
CompositionRoot *-- "3 " Service2Func : IService2
25-
CompositionRoot *-- Service3 : IService3
26-
CompositionRoot *-- "2 " Service4 : IService4
27-
FuncᐸIService3ᐳ *-- Service3 : IService3
20+
Service3 *-- "2 instances" Service4 : IService4
21+
CompositionRoot *-- Service1 : IService1
22+
CompositionRoot *-- "3 instances" Service2Func : IService2
23+
CompositionRoot *-- Service3 : IService3
24+
CompositionRoot *-- "2 instances" Service4 : IService4
25+
FuncᐸIService3ᐳ *-- Service3 : IService3
2826
namespace Pure.DI.Benchmarks.Benchmarks {
2927
class Func {
3028
<<partial>>

readme/SingletonDetails.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ Creating an object graph of 20 transition objects plus 1 singleton with an addit
66
```mermaid
77
---
88
config:
9-
maxTextSize: 2147483647
10-
maxEdges: 2147483647
119
class:
1210
hideEmptyMembersBox: true
1311
---
@@ -17,12 +15,12 @@ classDiagram
1715
Service3 --|> IService3
1816
Service4 --|> IService4
1917
Singleton ..> CompositionRoot : CompositionRoot TestPureDIByCR()
20-
Service1 *-- Service2 : IService2
21-
Service2 *-- "5 " Service3 : IService3
18+
Service1 *-- Service2 : IService2
19+
Service2 *-- "5 instances" Service3 : IService3
2220
Service3 o-- "2 Scoped instances" Service4 : IService4
2321
CompositionRoot o-- "Scoped" Service1 : IService1
24-
CompositionRoot *-- "3 " Service2 : IService2
25-
CompositionRoot *-- Service3 : IService3
22+
CompositionRoot *-- "3 instances" Service2 : IService2
23+
CompositionRoot *-- Service3 : IService3
2624
CompositionRoot o-- "2 Scoped instances" Service4 : IService4
2725
namespace Pure.DI.Benchmarks.Benchmarks {
2826
class Singleton {

readme/TransientDetails.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ Creating an object graph of 22 transient objects.
66
```mermaid
77
---
88
config:
9-
maxTextSize: 2147483647
10-
maxEdges: 2147483647
119
class:
1210
hideEmptyMembersBox: true
1311
---
@@ -17,13 +15,13 @@ classDiagram
1715
Service3 --|> IService3
1816
Service4 --|> IService4
1917
Transient ..> CompositionRoot : CompositionRoot TestPureDIByCR()
20-
Service1 *-- Service2 : IService2
21-
Service2 *-- "5 " Service3 : IService3
22-
Service3 *-- "2 " Service4 : IService4
23-
CompositionRoot *-- Service1 : IService1
24-
CompositionRoot *-- "3 " Service2 : IService2
25-
CompositionRoot *-- Service3 : IService3
26-
CompositionRoot *-- "2 " Service4 : IService4
18+
Service1 *-- Service2 : IService2
19+
Service2 *-- "5 instances" Service3 : IService3
20+
Service3 *-- "2 instances" Service4 : IService4
21+
CompositionRoot *-- Service1 : IService1
22+
CompositionRoot *-- "3 instances" Service2 : IService2
23+
CompositionRoot *-- Service3 : IService3
24+
CompositionRoot *-- "2 instances" Service4 : IService4
2725
namespace Pure.DI.Benchmarks.Benchmarks {
2826
class Transient {
2927
<<partial>>

readme/a-few-partial-classes.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,16 +222,14 @@ Class diagram:
222222
```mermaid
223223
---
224224
config:
225-
maxTextSize: 2147483647
226-
maxEdges: 2147483647
227225
class:
228226
hideEmptyMembersBox: true
229227
---
230228
classDiagram
231229
Comments --|> IComments
232230
ClassCommenter --|> IClassCommenter
233231
Composition ..> ClassCommenter : IClassCommenter Commenter
234-
ClassCommenter *-- Comments : IComments
232+
ClassCommenter *-- Comments : IComments
235233
namespace Pure.DI.UsageTests.Advanced.SeveralPartialClassesScenario {
236234
class ClassCommenter {
237235
<<class>>

readme/accumulators.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,20 +144,18 @@ Class diagram:
144144
```mermaid
145145
---
146146
config:
147-
maxTextSize: 2147483647
148-
maxEdges: 2147483647
149147
class:
150148
hideEmptyMembersBox: true
151149
---
152150
classDiagram
153-
SqlDataSource --|> IDataSource : typeof(Pure.DI.UsageTests.Advanced.AccumulatorScenario.SqlDataSource)
154-
NetworkDataSource --|> IDataSource : typeof(Pure.DI.UsageTests.Advanced.AccumulatorScenario.NetworkDataSource)
151+
SqlDataSource --|> IDataSource : typeof(Pure.DI.UsageTests.Advanced.AccumulatorScenario.SqlDataSource)
152+
NetworkDataSource --|> IDataSource : typeof(Pure.DI.UsageTests.Advanced.AccumulatorScenario.NetworkDataSource)
155153
Dashboard --|> IDashboard
156154
Composition ..> ValueTupleᐸIDashboardˏTelemetryRegistryᐳ : ValueTupleᐸIDashboardˏTelemetryRegistryᐳ Root
157155
Dashboard o-- "PerBlock" SqlDataSource : IDataSource
158-
Dashboard *-- SqlDataSource : typeof(Pure.DI.UsageTests.Advanced.AccumulatorScenario.SqlDataSource) IDataSource
159-
Dashboard o-- "Singleton" NetworkDataSource : typeof(Pure.DI.UsageTests.Advanced.AccumulatorScenario.NetworkDataSource) IDataSource
160-
ValueTupleᐸIDashboardˏTelemetryRegistryᐳ *-- Dashboard : IDashboard
156+
Dashboard *-- SqlDataSource : typeof(Pure.DI.UsageTests.Advanced.AccumulatorScenario.SqlDataSource) IDataSource
157+
Dashboard o-- "Singleton" NetworkDataSource : typeof(Pure.DI.UsageTests.Advanced.AccumulatorScenario.NetworkDataSource) IDataSource
158+
ValueTupleᐸIDashboardˏTelemetryRegistryᐳ *-- Dashboard : IDashboard
161159
ValueTupleᐸIDashboardˏTelemetryRegistryᐳ o-- "PerBlock" TelemetryRegistry : TelemetryRegistry
162160
namespace Pure.DI.UsageTests.Advanced.AccumulatorScenario {
163161
class Composition {
@@ -188,7 +186,7 @@ classDiagram
188186
}
189187
namespace System {
190188
class ValueTupleᐸIDashboardˏTelemetryRegistryᐳ {
191-
<<struct>>
189+
<<tuple>>
192190
+ValueTuple(IDashboard item1, TelemetryRegistry item2)
193191
}
194192
}

readme/advanced-interception.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,16 +174,14 @@ Class diagram:
174174
```mermaid
175175
---
176176
config:
177-
maxTextSize: 2147483647
178-
maxEdges: 2147483647
179177
class:
180178
hideEmptyMembersBox: true
181179
---
182180
classDiagram
183181
DataService --|> IDataService
184182
BusinessService --|> IBusinessService
185183
Composition ..> BusinessService : IBusinessService BusinessService
186-
BusinessService *-- DataService : IDataService
184+
BusinessService *-- DataService : IDataService
187185
namespace Pure.DI.UsageTests.Interception.AdvancedInterceptionScenario {
188186
class BusinessService {
189187
<<class>>

readme/array.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,19 +115,17 @@ Class diagram:
115115
```mermaid
116116
---
117117
config:
118-
maxTextSize: 2147483647
119-
maxEdges: 2147483647
120118
class:
121119
hideEmptyMembersBox: true
122120
---
123121
classDiagram
124122
TemperatureSensor --|> ISensor
125-
WindSensor --|> ISensor : "External"
123+
WindSensor --|> ISensor : "External"
126124
SensorService --|> ISensorService
127125
Composition ..> SensorService : ISensorService Sensor
128-
SensorService *-- ArrayᐸISensorᐳ : ArrayᐸISensorᐳ
129-
ArrayᐸISensorᐳ *-- TemperatureSensor : ISensor
130-
ArrayᐸISensorᐳ *-- WindSensor : "External" ISensor
126+
SensorService *-- ArrayᐸISensorᐳ : ArrayᐸISensorᐳ
127+
ArrayᐸISensorᐳ *-- TemperatureSensor : ISensor
128+
ArrayᐸISensorᐳ *-- WindSensor : "External" ISensor
131129
class ArrayᐸISensorᐳ {
132130
<<array>>
133131
}

0 commit comments

Comments
 (0)