Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20241205 DIコンテナ
Search
saka
December 23, 2025
2
0
Share
20241205 DIコンテナ
saka
December 23, 2025
More Decks by saka
See All by saka
20250304 関数型DDD 6
sakatttttta
0
17
20241219 Github Actionsの面倒いところ
sakatttttta
0
3
20250109 関数型
sakatttttta
0
3
20250116 関数型DDD 2
sakatttttta
0
4
20250123 関数型DDD 3
sakatttttta
0
2
20250206 関数型DDD 4
sakatttttta
0
1
20250213 関数型DDD 4
sakatttttta
0
2
20250220 Hono カスタムfetch
sakatttttta
0
1
20250225 関数型DDD 5
sakatttttta
0
1
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
310
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
How to Ace a Technical Interview
jacobian
281
24k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
170
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
130
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
220
The SEO Collaboration Effect
kristinabergwall1
0
410
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Design in an AI World
tapps
0
190
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
880
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
170
Transcript
DIίϯςφ
DIͬͯΔͱ…
new new new
const clientManager = new PrismaClientManager(); const transactionManager = new PrismaTransactionManager(clientManager);
const bookRepository = new PrismaBookRepository(clientManager); const registerBookApplicationService = new RegisterBookApplicationService( bookRepository, transactionManager );
ᓔಃ͍͠
͜͜ͰDIίϯςφ
const clientManager = new PrismaClientManager(); const transactionManager = new PrismaTransactionManager(clientManager);
const bookRepository = new PrismaBookRepository(clientManager); const registerBookApplicationService = new RegisterBookApplicationService( bookRepository, transactionManager ); ͜Ε͕
const registerBookApplicationService = container.resolve( RegisterBookApplicationService ); ͜Μ͚ͩʹ
ղܾํ๏(tsyringe)
Transient ɾσϑΥϧτ ɾresolve ΛݺͿͨͼʹ৽͍͠Πϯελϯε͕࡞ ɾ༻ྫɿී௨ʹ
Singleton ɾΞϓϦέʔγϣϯશମͰ1ͭͷΠϯελϯε ɾ༻ྫɿσʔλϕʔεΫϥΠΞϯτ
ResolutionScoped ɾґଘղܾʢresolveʣͷ1ճͷνΣʔϯͰಉ͡ΠϯελϯεΛ ڞ༗ ɾ༻ɿτϥϯβΫγϣϯͱ͔
ContainerScoped ɾґଘؔίϯςφʔɺ͜ͷґଘؔͷղܾ͕ཁٻ͞ΕΔͨͼ ʹಉ͡ΠϯελϯεΛฦ͠·͢ɻ͜Εγϯάϧτϯʹࣅ͍ͯ· ͕͢ɺࢠίϯςφʔ͕࡞͞ΕΔͱɺͦͷࢠίϯςφʔݻ༗ͷ ΠϯελϯεΛղܾ͠·͢ɻ ɾ༻ɿʁʁʁ
༻ྫ
@injectable() export class RegisterItemApplicationService { constructor( @inject("IItemRepository") private readonly itemRepository:
IItemRepository, @inject("ITransactionManager") private readonly transactionManager: ITransactionManager ) {} ུ }
// TransactionManager container.register("ITransactionManager", { useClass: SimpleTransactionManager, }); // Repository container.register(
"IItemRepository", { useClass: InMemoryItemRepository, }, { lifecycle: Lifecycle.ResolutionScoped, } );
const registerItemApplicationService = container.resolve(RegisterItemApplicationService); await registerItemApplicationService.execute("Notebook");