-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathrss.xml
115 lines (115 loc) · 103 KB
/
rss.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>InversifyJS Blog</title>
<link>https://inversify.github.io/blog/</link>
<description>InversifyJS Blog</description>
<lastBuildDate>Sun, 09 Feb 2025 00:00:00 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<item>
<title><![CDATA[Announcing 7.0.0-alpha.5]]></title>
<link>https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-5-prerelease/</link>
<guid>https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-5-prerelease/</guid>
<pubDate>Sun, 09 Feb 2025 00:00:00 GMT</pubDate>
<description><![CDATA[In this version, we are announcing more performance improvements!]]></description>
<content:encoded><![CDATA[<p>In this version, we are announcing more performance improvements!</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_hedv" id="bindingmetadata-renamed-to-bindingconstraints">BindingMetadata renamed to BindingConstraints<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-5-prerelease/#bindingmetadata-renamed-to-bindingconstraints" class="hash-link" aria-label="Direct link to BindingMetadata renamed to BindingConstraints" title="Direct link to BindingMetadata renamed to BindingConstraints"></a></h2>
<p>After thinking about it, we decided to rename <code>BindingMetadata</code> to <code>BindingConstraints</code>. We believe that this name better represents the purpose of the interface: representing the constraints associated to a certain binding.</p>
<h2 class="anchor anchorWithStickyNavbar_hedv" id="performance-improvements">Performance improvements<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-5-prerelease/#performance-improvements" class="hash-link" aria-label="Direct link to Performance improvements" title="Direct link to Performance improvements"></a></h2>
<p>We have been working on improving the performance of the library. It now performs close to tsyringe, outperforming it in some scenarios. Further performance optimizations will be made in the future, but we are happy with the current results.</p>
<div class="language-bash codeBlockContainer_M1Wd theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Jnb_"><pre tabindex="0" class="prism-code language-bash codeBlock_tniK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines__4sy"><span class="token-line" style="color:#393A34"><span class="token plain">[CJS] Running benchmarks...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get service in singleton scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '294.58 ± 0.66%' │ '271.00 ± 9.00' │ '3592087 ± 0.01%' │ '3690037 ± 118608' │ 3394675 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '1004.1 ± 2.17%' │ '922.00 ± 19.00' │ '1061639 ± 0.02%' │ '1084599 ± 21899' │ 995946 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '330.74 ± 3.28%' │ '310.00 ± 9.00' │ '3214288 ± 0.01%' │ '3225806 ± 96453' │ 3023493 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get service in transient scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '633.13 ± 0.36%' │ '601.00 ± 10.00' │ '1642649 ± 0.01%' │ '1663894 ± 27232' │ 1579464 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '5259.8 ± 3.61%' │ '4909.0 ± 60.00' │ '200786 ± 0.03%' │ '203707 ± 2460' │ 190122 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '528.69 ± 0.54%' │ '481.00 ± 10.00' │ '2033055 ± 0.02%' │ '2079002 ± 44140' │ 1891458 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get complex service in singleton scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '310.61 ± 1.80%' │ '281.00 ± 10.00' │ '3497460 ± 0.01%' │ '3558719 ± 131318' │ 3219428 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '1016.4 ± 1.18%' │ '932.00 ± 11.00' │ '1051408 ± 0.02%' │ '1072961 ± 12815' │ 983865 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '323.07 ± 0.74%' │ '291.00 ± 9.00' │ '3336380 ± 0.01%' │ '3436426 ± 103093' │ 3095287 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get complex service in transient scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬───────────────────┬──────────────────────┬────────────────────────┬────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼───────────────────┼──────────────────────┼────────────────────────┼────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '347315 ± 0.95%' │ '334639 ± 2224.00' │ '2921 ± 0.30%' │ '2988 ± 20' │ 2880 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '4778396 ± 1.17%' │ '4569745 ± 48942.50' │ '210 ± 0.91%' │ '219 ± 2' │ 210 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '234380 ± 0.52%' │ '224692 ± 1392.00' │ '4335 ± 0.28%' │ '4451 ± 28' │ 4267 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴───────────────────┴──────────────────────┴────────────────────────┴────────────────────────┴─────────┘</span><br></span></code></pre><div class="buttonGroup_yquQ"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_tG45" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_nuFA"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_AfzH"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="language-bash codeBlockContainer_M1Wd theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Jnb_"><pre tabindex="0" class="prism-code language-bash codeBlock_tniK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines__4sy"><span class="token-line" style="color:#393A34"><span class="token plain">[ESM] Running benchmarks...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get service in singleton scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '254.83 ± 0.68%' │ '241.00 ± 10.00' │ '4042055 ± 0.01%' │ '4149378 ± 165314' │ 3924178 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '941.12 ± 3.69%' │ '852.00 ± 10.00' │ '1153040 ± 0.01%' │ '1173709 ± 13940' │ 1062564 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '282.98 ± 0.42%' │ '261.00 ± 9.00' │ '3713697 ± 0.01%' │ '3831418 ± 127714' │ 3533782 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get service in transient scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '500.08 ± 0.49%' │ '471.00 ± 10.00' │ '2092141 ± 0.01%' │ '2123142 ± 44140' │ 1999673 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '5020.6 ± 4.42%' │ '4649.0 ± 40.00' │ '212127 ± 0.03%' │ '215100 ± 1867' │ 199179 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '450.30 ± 0.50%' │ '421.00 ± 10.00' │ '2346200 ± 0.01%' │ '2375297 ± 57793' │ 2220732 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get complex service in singleton scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────┬──────────────────┬────────────────────────┬────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────┼──────────────────┼────────────────────────┼────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '276.74 ± 1.70%' │ '261.00 ± 9.00' │ '3730378 ± 0.01%' │ '3831418 ± 127714' │ 3613563 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '945.43 ± 2.05%' │ '872.00 ± 10.00' │ '1127286 ± 0.01%' │ '1146789 ± 13304' │ 1057716 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '322.27 ± 2.72%' │ '291.00 ± 9.00' │ '3361154 ± 0.01%' │ '3436426 ± 103093' │ 3102969 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────┴──────────────────┴────────────────────────┴────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get complex service in transient scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬───────────────────┬───────────────────────┬────────────────────────┬────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency avg (ns) │ Latency med (ns) │ Throughput avg (ops/s) │ Throughput med (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼───────────────────┼───────────────────────┼────────────────────────┼────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '235090 ± 0.46%' │ '227829 ± 1542.00' │ '4299 ± 0.23%' │ '4389 ± 30' │ 4254 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '4593344 ± 0.83%' │ '4714087 ± 295530.50' │ '219 ± 0.83%' │ '212 ± 14' │ 218 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '239653 ± 0.47%' │ '230524 ± 2385.00' │ '4231 ± 0.28%' │ '4338 ± 45' │ 4173 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴───────────────────┴───────────────────────┴────────────────────────┴────────────────────────┴─────────┘</span><br></span></code></pre><div class="buttonGroup_yquQ"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_tG45" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_nuFA"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_AfzH"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
<category>Releases</category>
</item>
<item>
<title><![CDATA[Announcing 7.0.0-alpha.4]]></title>
<link>https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-4-prerelease/</link>
<guid>https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-4-prerelease/</guid>
<pubDate>Sun, 02 Feb 2025 00:00:00 GMT</pubDate>
<description><![CDATA[In this version, we are announcing a new type of binding!]]></description>
<content:encoded><![CDATA[<p>In this version, we are announcing a new type of binding!</p>
<!-- -->
<p>Several users asked for a way to pass resolved services as arguments to a factory or a provider. <a href="https://inversify.github.io/docs/next/api/binding-syntax/#toresolvedvalue">Resolved value bindings</a> allows providing service dependencies without relying on <code>ResolutionContext</code> (formerly known as <code>Context</code>).</p>
<p>consider the following example:</p>
<div class="language-ts codeBlockContainer_M1Wd theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Jnb_"><pre tabindex="0" class="prism-code language-ts codeBlock_tniK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines__4sy"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Katana</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> material</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> damage</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> dbConnectionSymbol</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">symbol</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> Symbol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">for</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'DbConnection'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> katanaDbCollectionSymbol</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">symbol</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> Symbol</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">for</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'KatanaRepository'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> container</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Container </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Container</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">injectable</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">KatanaRepository</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">readonly</span><span class="token plain"> #dbCollection</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AwesomeDbDriverCollection</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">Katana</span><span class="token operator" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">inject</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">katanaDbCollectionSymbol</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> dbCollection</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AwesomeDbDriverCollection</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">Katana</span><span class="token operator" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">#dbCollection </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> dbCollection</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">find</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">query</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">unknown</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">Promise</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">Katana</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">></span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">#dbCollection</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">find</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">container</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">bind</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">MyAwesomeEnvService</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toSelf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">container</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">bind</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">dbConnectionSymbol</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toResolvedValue</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> envService</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> MyAwesomeEnvService</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">Promise</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">AwesomeDbDriverConnection</span><span class="token operator" style="color:#393A34">></span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=></span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> databaseUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> envService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getEnvironment</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">dbUrl</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> AwesomeDbDriverImplementation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">connect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">databaseUrl</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">MyAwesomeEnvService</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">inSingletonScope</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">container</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">bind</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">katanaDbCollectionSymbol</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toResolvedValue</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> connection</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AwesomeDbDriverConnection</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> AwesomeDbDriverCollection</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">Katana</span><span class="token operator" style="color:#393A34">></span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=></span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> connection</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getCollection</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">Katana</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">dbConnectionSymbol</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">inSingletonScope</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">container</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">bind</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">KatanaRepository</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toSelf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_yquQ"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_tG45" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_nuFA"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_AfzH"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Previously, the most common way to achieve this was by using <code>Context</code> base dynamic values. Instead, <code>toResolvedValue</code> can be used to achieve the same result.</p>
<h2 class="anchor anchorWithStickyNavbar_hedv" id="motivation">Motivation<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-4-prerelease/#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation"></a></h2>
<p>When <code>.toResolvedValue</code> is a good enough solution, using <code>ResolutionContext</code> should not be the way to go in these scenarios. <code>ResolutionContext</code> is a powerful API, but it comes with a few cons as well.</p>
<p>Every time <code>ResolutionContext.get</code> is used, a new resolution is triggered. This resolution is unaware of the parent resolution. Not the end of the world, but this lack of awareness can lead to, for example, not providing the most friendly error messages when a circular dependency is detected if the cycle involves multiple resolution contexts.</p>
<p>On the other hand, <code>ResolutionContext</code> based bindings might be useful in more complex scenarios. For example:</p>
<div class="language-ts codeBlockContainer_M1Wd theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Jnb_"><pre tabindex="0" class="prism-code language-ts codeBlock_tniK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines__4sy"><span class="token-line" style="color:#393A34"><span class="token plain">container</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">bind</span><span class="token generic-function generic class-name operator" style="color:#393A34"><</span><span class="token generic-function generic class-name">Engine</span><span class="token generic-function generic class-name operator" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Engine'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">to</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">PetrolEngine</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">whenNamed</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'petrol'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">container</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">bind</span><span class="token generic-function generic class-name operator" style="color:#393A34"><</span><span class="token generic-function generic class-name">Engine</span><span class="token generic-function generic class-name operator" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Engine'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">to</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">DieselEngine</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">whenNamed</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'diesel'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">bind</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">Factory</span><span class="token operator" style="color:#393A34"><</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">displacement</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=></span><span class="token plain"> Engine</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">>></span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Factory<Engine>'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toFactory</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">context</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> ResolutionContext</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=></span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">named</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=></span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">displacement</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=></span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> engine</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Engine </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> context</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">get</span><span class="token generic-function generic class-name operator" style="color:#393A34"><</span><span class="token generic-function generic class-name">Engine</span><span class="token generic-function generic class-name operator" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Engine'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> named</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> engine</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">displacement </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> displacement</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> engine</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">injectable</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">DieselCarFactory</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">implements</span><span class="token plain"> </span><span class="token class-name">CarFactory</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">readonly</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">#dieselFactory</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">displacement</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=></span><span class="token plain"> Engine</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">inject</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Factory<Engine>'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">factory</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">category</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=></span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">displacement</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=></span><span class="token plain"> Engine</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Injecting an engine factory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Creating a diesel engine factory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">#dieselFactory </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">factory</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'diesel'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createEngine</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">displacement</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Engine </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Creating a concrete diesel engine</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">#dieselFactory</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">displacement</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup_yquQ"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_tG45" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_nuFA"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_AfzH"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Can this be done with <code>toResolvedValue</code>? Yes, but it would require extra boilerplate code. You might be interesed in doing so, and implementing your <code>Engine</code> factory without relying on <code>ResolutionContext</code> would be an excellent way to provide code less coupled to <code>inversify</code>. On the other hand, <code>.toFactory</code> can be used to achieve the same result with less code.</p>]]></content:encoded>
<category>Releases</category>
</item>
<item>
<title><![CDATA[Announcing 7.0.0-alpha.2]]></title>
<link>https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-2-prerelease/</link>
<guid>https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-2-prerelease/</guid>
<pubDate>Sun, 26 Jan 2025 00:00:00 GMT</pubDate>
<description><![CDATA[In this version, we are announcing significant performance improvements! Let's see how caches can assist us in accomplishing such a feat!]]></description>
<content:encoded><![CDATA[<p>In this version, we are announcing significant performance improvements! Let's see how caches can assist us in accomplishing such a feat!</p>
<h2 class="anchor anchorWithStickyNavbar_hedv" id="context">Context<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-2-prerelease/#context" class="hash-link" aria-label="Direct link to Context" title="Direct link to Context"></a></h2>
<h3 class="anchor anchorWithStickyNavbar_hedv" id="the-current-container-design">The current container design<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-2-prerelease/#the-current-container-design" class="hash-link" aria-label="Direct link to The current container design" title="Direct link to The current container design"></a></h3>
<p>Like previous versions of Inversify, when a service resolution is requested by calling <code>container.get</code>, a planner schedules the bindings to be used in a tree structure, which is then used to build the instances that compose the requested service.</p>
<h3 class="anchor anchorWithStickyNavbar_hedv" id="adding-a-caching-strategy">Adding a caching strategy<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-2-prerelease/#adding-a-caching-strategy" class="hash-link" aria-label="Direct link to Adding a caching strategy" title="Direct link to Adding a caching strategy"></a></h3>
<p>Previous versions of Inversify don't cache plans. It might sound surprising, but it's the way it is. Previous versions of Inversify expose too many internal APIs, making it impossible for plans to be deterministic. For example, previous versions of Inversify give <code>container</code> access via context to binding constraints, allowing the possibility to cause side effects in the planning phase!</p>
<p>With some reasonable restrictions, <code>inversify@7</code> keeps the same degree of flexibility with deterministic internal plans. But, wait, if plans are deterministic, they can be cached!</p>
<h4 class="anchor anchorWithStickyNavbar_hedv" id="why-cache-plans">Why cache plans?<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-2-prerelease/#why-cache-plans" class="hash-link" aria-label="Direct link to Why cache plans?" title="Direct link to Why cache plans?"></a></h4>
<p>You don't need to compute a cached plan again, and the garbage collector doesn't need to clear memory of a non-computed cached plan, which is an operation heavier than you might expect when optimizing these micro tasks.</p>
<h2 class="anchor anchorWithStickyNavbar_hedv" id="results">Results<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-2-prerelease/#results" class="hash-link" aria-label="Direct link to Results" title="Direct link to Results"></a></h2>
<p>After running some benchmarks, Inversify 7 is faster than Inversify 6 when working with singleton scope services and way faster when working with transient scoped services.</p>
<p>We will use a faster container for reference. Tsyringe is the perfect candidate: their simplicity allows resolving services without any planning phase, and therefore it's going to be way faster than Inversify.</p>
<p>Benchmark implementation can be observed at the <code>@inversifyjs/container-benchmarks</code> package. Feel free to run them or have a look at any of the latest monorepo PRs which include benchmark results.</p>
<p>As of today, the latest benchmark results are as follows:</p>
<div class="language-bash codeBlockContainer_M1Wd theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Jnb_"><pre tabindex="0" class="prism-code language-bash codeBlock_tniK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines__4sy"><span class="token-line" style="color:#393A34"><span class="token plain">[CJS] Running benchmarks...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get service in singleton scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────────┬─────────────────────┬────────────────────────────┬───────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency average (ns) │ Latency median (ns) │ Throughput average (ops/s) │ Throughput median (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────────┼─────────────────────┼────────────────────────────┼───────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '582.96 ± 0.80%' │ '561.00' │ '1758258 ± 0.01%' │ '1782531' │ 1715395 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '1136.19 ± 0.35%' │ '982.00' │ '961212 ± 0.03%' │ '1018330' │ 880137 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '329.02 ± 1.10%' │ '291.00' │ '3271688 ± 0.01%' │ '3436426' │ 3039353 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────────┴─────────────────────┴────────────────────────────┴───────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get service in transient scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────────┬─────────────────────┬────────────────────────────┬───────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency average (ns) │ Latency median (ns) │ Throughput average (ops/s) │ Throughput median (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────────┼─────────────────────┼────────────────────────────┼───────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '1023.52 ± 0.29%' │ '992.00' │ '1003603 ± 0.01%' │ '1008065' │ 977022 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '5181.39 ± 0.41%' │ '4960.00' │ '198404 ± 0.03%' │ '201613' │ 192999 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '466.06 ± 0.85%' │ '441.00' │ '2261272 ± 0.01%' │ '2267574' │ 2145645 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────────┴─────────────────────┴────────────────────────────┴───────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get complex service in singleton scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────────┬─────────────────────┬────────────────────────────┬───────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency average (ns) │ Latency median (ns) │ Throughput average (ops/s) │ Throughput median (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────────┼─────────────────────┼────────────────────────────┼───────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '614.26 ± 1.74%' │ '591.00' │ '1673265 ± 0.01%' │ '1692047' │ 1627989 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '1061.52 ± 0.48%' │ '1001.00' │ '989393 ± 0.01%' │ '999001' │ 942048 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '335.53 ± 0.58%' │ '311.00' │ '3171618 ± 0.01%' │ '3215434' │ 2980330 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────────┴─────────────────────┴────────────────────────────┴───────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get complex service in transient scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────────┬────────────────────────┬────────────────────────────┬───────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency average (ns) │ Latency median (ns) │ Throughput average (ops/s) │ Throughput median (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────────┼────────────────────────┼────────────────────────────┼───────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '349104.25 ± 0.51%' │ '340334.00' │ '2893 ± 0.28%' │ '2938' │ 2865 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '5023278.98 ± 1.16%' │ '4783030.50 ± 4958.50' │ '200 ± 1.00%' │ '209' │ 200 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '249415.89 ± 0.59%' │ '237333.00' │ '4088 ± 0.32%' │ '4213' │ 4011 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────────┴────────────────────────┴────────────────────────────┴───────────────────────────┴─────────┘</span><br></span></code></pre><div class="buttonGroup_yquQ"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_tG45" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_nuFA"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_AfzH"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="language-bash codeBlockContainer_M1Wd theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_Jnb_"><pre tabindex="0" class="prism-code language-bash codeBlock_tniK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines__4sy"><span class="token-line" style="color:#393A34"><span class="token plain">[ESM] Running benchmarks...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get service in singleton scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────────┬─────────────────────┬────────────────────────────┬───────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency average (ns) │ Latency median (ns) │ Throughput average (ops/s) │ Throughput median (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────────┼─────────────────────┼────────────────────────────┼───────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '578.15 ± 0.88%' │ '541.00' │ '1809935 ± 0.01%' │ '1848429' │ 1729642 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '904.50 ± 0.33%' │ '851.00' │ '1159099 ± 0.01%' │ '1175088' │ 1105586 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '287.15 ± 1.12%' │ '261.00' │ '3722553 ± 0.01%' │ '3831418' │ 3482456 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────────┴─────────────────────┴────────────────────────────┴───────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get service in transient scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────────┬─────────────────────┬────────────────────────────┬───────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency average (ns) │ Latency median (ns) │ Throughput average (ops/s) │ Throughput median (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────────┼─────────────────────┼────────────────────────────┼───────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '837.39 ± 0.28%' │ '802.00' │ '1232351 ± 0.01%' │ '1246883' │ 1194187 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '4868.25 ± 0.32%' │ '4679.00' │ '211104 ± 0.03%' │ '213721' │ 205413 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '494.17 ± 0.40%' │ '461.00' │ '2118431 ± 0.01%' │ '2169197' │ 2023611 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────────┴─────────────────────┴────────────────────────────┴───────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get complex service in singleton scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────────┬─────────────────────┬────────────────────────────┬───────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency average (ns) │ Latency median (ns) │ Throughput average (ops/s) │ Throughput median (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────────┼─────────────────────┼────────────────────────────┼───────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '606.92 ± 1.72%' │ '571.00' │ '1739723 ± 0.01%' │ '1751313' │ 1647652 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '924.23 ± 2.51%' │ '852.00' │ '1153936 ± 0.01%' │ '1173709' │ 1081983 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '307.19 ± 0.48%' │ '290.00' │ '3432297 ± 0.01%' │ '3448276' │ 3255286 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────────┴─────────────────────┴────────────────────────────┴───────────────────────────┴─────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Get complex service in transient scope</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">┌─────────┬────────────────────┬──────────────────────┬─────────────────────────┬────────────────────────────┬───────────────────────────┬─────────┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ (index) │ Task name │ Latency average (ns) │ Latency median (ns) │ Throughput average (ops/s) │ Throughput median (ops/s) │ Samples │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├─────────┼────────────────────┼──────────────────────┼─────────────────────────┼────────────────────────────┼───────────────────────────┼─────────┤</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 0 │ 'inversifyCurrent' │ '249696.67 ± 0.47%' │ '241791.00' │ '4047 ± 0.24%' │ '4136' │ 4005 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 1 │ 'inversify6' │ '4596691.40 ± 1.18%' │ '4710800.50 ± 16420.50' │ '219 ± 0.99%' │ '212 ± 1' │ 218 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">│ 2 │ 'tsyringe' │ '235461.28 ± 0.43%' │ '227424.00' │ '4296 ± 0.25%' │ '4397' │ 4247 │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">└─────────┴────────────────────┴──────────────────────┴─────────────────────────┴────────────────────────────┴───────────────────────────┴─────────┘</span><br></span></code></pre><div class="buttonGroup_yquQ"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_tG45" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_nuFA"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_AfzH"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>As you can see, <code>inversify@7</code> performs way better than <code>inversify@6</code> in every scenario, especially when working with transient scopes. It's slower than <code>tsyringe</code>, but now I honestly believe Inversify is fast enough while providing a more flexible API.</p>
<h2 class="anchor anchorWithStickyNavbar_hedv" id="whats-next">What's next<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-2-prerelease/#whats-next" class="hash-link" aria-label="Direct link to What's next" title="Direct link to What's next"></a></h2>
<p>Further performance optimizations can be accomplished. It's out of the scope of <code>inversify@7</code>, but let me say that we will make Inversify faster than <code>tsyringe</code> while providing the same flexible API. If you want to be part of it, don't hesitate to open a discussion in the <a href="https://github.com/inversify/monorepo/" target="_blank" rel="noopener noreferrer">monorepo</a> and join us in this adventure!</p>]]></content:encoded>
<category>Releases</category>
</item>
<item>
<title><![CDATA[Announcing 7.0.0-alpha.0]]></title>
<link>https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/</link>
<guid>https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/</guid>
<pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate>
<description><![CDATA[It's been a while since the last time inversify released a major version. Some exciting changes are on their way, and we are announcing them in a prerelease so you can participate and discuss them before it's finally released.]]></description>
<content:encoded><![CDATA[<p>It's been a while since the last time <code>inversify</code> released a major version. Some exciting changes are on their way, and we are announcing them in a prerelease so you can participate and <a href="https://github.com/inversify/InversifyJS/discussions/1712" target="_blank" rel="noopener noreferrer">discuss</a> them before it's finally released.</p>
<p>Feel free to check out the <a href="https://inversify.github.io/docs/next/introduction/getting-started/">next version docs</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_hedv" id="notable-changes">Notable changes<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#notable-changes" class="hash-link" aria-label="Direct link to Notable changes" title="Direct link to Notable changes"></a></h2>
<h3 class="anchor anchorWithStickyNavbar_hedv" id="injection-inheritance">Injection inheritance<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#injection-inheritance" class="hash-link" aria-label="Direct link to Injection inheritance" title="Direct link to Injection inheritance"></a></h3>
<p>Previous versions of inversify provided implicit injection inheritance. However, this approach was deprecated in favor of the <code>@injectFromBase</code> decorator. This decorator allows you to inject dependencies from the base class.</p>
<p>Refer to the <a href="https://inversify.github.io/docs/next/fundamentals/inheritance/">inheritance docs</a> for more information.</p>
<h3 class="anchor anchorWithStickyNavbar_hedv" id="factory-like-bindings">Factory-like bindings<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#factory-like-bindings" class="hash-link" aria-label="Direct link to Factory-like bindings" title="Direct link to Factory-like bindings"></a></h3>
<p><code>Factory</code>, <code>Provider</code>, and <code>DynamicValue</code> bindings now receive a <code>ResolutionContext</code>. Refer to the <a href="https://inversify.github.io/docs/next/api/binding-syntax/#tofactory">API docs</a> for more information.</p>
<h4 class="anchor anchorWithStickyNavbar_hedv" id="motivation">Motivation<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation"></a></h4>
<p>Previous <code>Context</code> and <code>Request</code> exposed objects provided internal data which should never be accessed by users. <code>ResolutionContext</code> allows resolving services in the same way <code>Context.container</code> previously allowed.</p>
<h3 class="anchor anchorWithStickyNavbar_hedv" id="binding-constraints">Binding constraints<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#binding-constraints" class="hash-link" aria-label="Direct link to Binding constraints" title="Direct link to Binding constraints"></a></h3>
<p>Some methods have been renamed. No <code>context</code> is passed to the constraint in favor of a <code>BindingConstraints</code> parameter.</p>
<h4 class="anchor anchorWithStickyNavbar_hedv" id="motivation-1">Motivation<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#motivation-1" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation"></a></h4>
<p>Previous <code>Context</code> and <code>Request</code> exposed objects provided internal data which should never be accessed by users. In this specific case, binding constraints are invoked in the planning phase. No resolution-related APIs should be exposed whatsoever, just the metadata used to compute binding constraints such as names, tags, and service IDs in the planning nodes.</p>
<h3 class="anchor anchorWithStickyNavbar_hedv" id="binding-activations">Binding activations<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#binding-activations" class="hash-link" aria-label="Direct link to Binding activations" title="Direct link to Binding activations"></a></h3>
<p>Binding activations now receive a <code>ResolutionContext</code>. Refer to the <a href="https://inversify.github.io/docs/next/api/binding-syntax/#onactivation">API docs</a> for more information.</p>
<h4 class="anchor anchorWithStickyNavbar_hedv" id="motivation-2">Motivation<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#motivation-2" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation"></a></h4>
<p>Previous <code>Context</code> and <code>Request</code> exposed objects provided internal data which should never be accessed by users. <code>ResolutionContext</code> allows resolving services in the same way <code>Context.container</code> previously allowed.</p>
<h2 class="anchor anchorWithStickyNavbar_hedv" id="incoming-changes">Incoming changes<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#incoming-changes" class="hash-link" aria-label="Direct link to Incoming changes" title="Direct link to Incoming changes"></a></h2>
<p>Some additional changes will be shipped in the <code>inversify@7</code> release.</p>
<h3 class="anchor anchorWithStickyNavbar_hedv" id="performance-optimizations">Performance optimizations<a href="https://inversify.github.io/blog/announcing-inversify-7-0-0-alpha-0-prerelease/#performance-optimizations" class="hash-link" aria-label="Direct link to Performance optimizations" title="Direct link to Performance optimizations"></a></h3>
<p>With these binding constraint models, it's now reasonable to assume a service plan is cacheable. Planning caches should dramatically improve container performance when providing services.</p>]]></content:encoded>
<category>Releases</category>
</item>
<item>
<title><![CDATA[Welcome]]></title>
<link>https://inversify.github.io/blog/welcome/</link>
<guid>https://inversify.github.io/blog/welcome/</guid>
<pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[Welcome to the new documentation pages! We are rebuilding our docs on top of Docusaurus to provide a better developer experience.]]></description>
<content:encoded><![CDATA[<p>Welcome to the new documentation pages! We are rebuilding our docs on top of <a href="https://docusaurus.io/" target="_blank" rel="noopener noreferrer">Docusaurus</a> to provide a better developer experience.</p>
<p><img decoding="async" loading="lazy" alt="Docusaurus Plushie" src="https://inversify.github.io/assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg" width="1500" height="500" class="img_QY1T"></p>
<p>This docs will include the latest released version of <code>inversify</code>. Major Pre releases will be documented as well so you can learn about them and discuss then in the prerelease discussion thread.</p>]]></content:encoded>
</item>
</channel>
</rss>