How Dependency Injection Works in

Поделиться
HTML-код
  • Опубликовано: 25 июл 2024
  • In this dependency injection c# tutorial I answer the questions: what is dependency injection? how does dependency injection work? how do dependency injection lifetimes work? We implement our own dependency injection container and a resolver (which really could just be one object) with singleton and transient lifetimes for our dependencies. Primarily we are trying to understand that we want to know about all possible dependencies, so when we try to use a service we can assemble it automatically, and all services come from one source.
    Patreon 🤝 / raw_coding
    Courses 📚 learning.raw-coding.dev
    Shop 🛒 shop.raw-coding.dev
    Discord 💬 / discord
    Twitter 📣 / anton_t0shik
    Twitch 🎥 / raw_coding
    👉 Try Rider
    www.jetbrains.com/store/redeem/
    RD5K9-4TXXW-KMV3G-NYWSF-3ZSTP
    LINQPad: www.linqpad.net/
    Source: github.com/T0shik/raw-coding-...
    #csharp #dotnet

Комментарии • 142

  • @kentswan3230
    @kentswan3230 7 месяцев назад +4

    Even though this is 3 years old the knowledge being explained is as current as yesterday. I'm going to need to watch this whole thing a couple of times because there's a ton of useful intrinsic understanding being rapidly but coherently presented that makes the other DI frameworks more understandable. A Belated THANKS!

  • @jankohler7560
    @jankohler7560 4 года назад +12

    Great! This is what i was looking for. Now it gets so much clearer.

  • @adistutorials5399
    @adistutorials5399 4 года назад +3

    Thanks for this man. You create really good contents, channel like this should go big for real!

  • @phaswanamalatjie5790
    @phaswanamalatjie5790 Год назад +1

    I know this video is old but it was a nice refresher. I enjoyed it, thank you.

  • @aliahmadi3902
    @aliahmadi3902 Год назад

    Thank you, Anton, you really opened my eyes to this concept. I just used it without understanding it.

  • @hadibazmi6340
    @hadibazmi6340 4 года назад +3

    Great work as always, tnx a lot
    i literally watched more than 5 hour worth of time videos about DI so i can grasp the full picture
    your video connected all the dots that i had.
    i'm looking forward for your MVC content that you mentioned at the end of this video.

    • @RawCoding
      @RawCoding  4 года назад

      Glad I could help and I think that video will come in about a week or 2

  • @littlemancrs
    @littlemancrs 4 года назад +15

    Awesome stuff!
    I've started out in the IT world, less than a year ago, with videos from KudVenKat, for real beginners.
    But yours, are on a whole different level. I apreciate them very much.
    Also, I never thought that twich is used for anything other than games. :D
    GG!

    • @RawCoding
      @RawCoding  4 года назад +1

      Eyyy thanks man, and yeah I stream working on personal projects, where I can answer questions and talk with viewers, come join i post updates on discord)

  • @dendeline7816
    @dendeline7816 4 года назад +6

    Thank you so much! I'm not good at English, but thanks to easy interpretation, lots of people like me will be interested in your content.

  • @balramverma4873
    @balramverma4873 3 года назад +2

    This is insanely great stuff :D Thank you Anton .

    • @RawCoding
      @RawCoding  3 года назад

      Thanks for watching))

  • @-xeL
    @-xeL 3 года назад +1

    love the deep dives, nice work!

  • @ivanvincent7534
    @ivanvincent7534 3 года назад +4

    Really impressive. Congratulations on your skill set, this is the ultimate under the hood tutorial.

  • @RamcoBros
    @RamcoBros Год назад

    Amazing Video, Nice explanation bro. Thank you for making the concepts clear. I
    This contents helps for the people who are new and starting to learn the programming and concepts associated with it.

  • @coreyb1102
    @coreyb1102 9 месяцев назад +1

    A month into my c# and asp net and you have the best tutorials haha down.

    • @RawCoding
      @RawCoding  9 месяцев назад

      Glad you enjoy them!

  • @jxxqll
    @jxxqll 4 года назад +2

    Learned a lot! Thank you so much!

    • @RawCoding
      @RawCoding  4 года назад

      Thank you for watching )

  • @septinary
    @septinary 4 года назад +3

    This video helped me a lot. Thank you.

    • @RawCoding
      @RawCoding  4 года назад

      Thank you for watching :)

  • @9415745
    @9415745 3 года назад +1

    these C# videos are fantastic, thanks!!

  • @vladimirmelnikov849
    @vladimirmelnikov849 2 года назад +1

    Amazing, this is so clear now. Thank you!

  • @azeddine8539
    @azeddine8539 4 года назад +9

    Super, Thanks. I Will be very happy if you can explain how MVC DI works.

  • @vasugupta1
    @vasugupta1 3 года назад +1

    Great work, cheers for the clean explanation

    • @RawCoding
      @RawCoding  3 года назад

      thank you for watching :)

  • @krystian9924
    @krystian9924 Год назад +1

    This tutorials are the real deal truly..like your making tutorials and explaining things in a way I would explain them to someone if I knew these topics haha
    Your explonations truly give you insight into topics, not just another abstractions to get by
    I think that this is what happens when you are truly passionate or have read some masterpieces (SICP shhh) 😉

    • @RawCoding
      @RawCoding  Год назад +1

      thank you for the kind words.
      I attest my knowledge to Clojure

  • @PrasadJachak
    @PrasadJachak 3 года назад +1

    Thank you for this Video.. Middleware looked complex for me before this video. Now I understood how to works...

  • @nikolazagorac8634
    @nikolazagorac8634 Год назад +1

    This is the best explanation I have seen yet

  • @TheEamonKeane
    @TheEamonKeane Год назад

    This is very cool! Advanced stuff is difficult to find on RUclips

  • @eclipsetutorialvideo
    @eclipsetutorialvideo 5 месяцев назад

    Impressive you did it without edit it seems :) You did Singleton and Transient, it would be good to know how Scoped is working as lifetime

  • @The69pawlak
    @The69pawlak 3 года назад +1

    Very useful stuff, thanks for that!

    • @RawCoding
      @RawCoding  3 года назад

      Thank you for watching!

  • @hirenpatel2006
    @hirenpatel2006 3 года назад +1

    Great video and very easy to follow

  • @achilleskocaeli
    @achilleskocaeli 3 года назад +1

    Thanks Anton. You are my new hero..

    • @RawCoding
      @RawCoding  3 года назад

      Noooo, thank you for watching!

  • @ksichtmen
    @ksichtmen 3 года назад +1

    Awesome video! I would love to see the MVC explanation video. Maybe its already out (gonna check now) ~

    • @RawCoding
      @RawCoding  3 года назад +1

      It is check the playlist:)

  • @yazanshakhshir3049
    @yazanshakhshir3049 2 года назад +1

    You are a great person
    Thank you for the great explanation

  • @anatoliytkachenko7081
    @anatoliytkachenko7081 3 года назад +1

    Anton, thank you a lot for explanation! Like!

    • @RawCoding
      @RawCoding  3 года назад

      Thank you for watching!

  • @abuzeromohammed3386
    @abuzeromohammed3386 4 года назад +2

    Thank you for these special video s

    • @RawCoding
      @RawCoding  4 года назад +1

      Thank you for watching :)

  • @nouchance
    @nouchance Год назад

    Thank you Sir!

  • @georgedraghiceanu1526
    @georgedraghiceanu1526 3 года назад +1

    Great video!

  • @mohammadjouhari4607
    @mohammadjouhari4607 6 месяцев назад

    great stuffs. keeps going.

  • @sachinsaini8595
    @sachinsaini8595 2 года назад +1

    Nice video....very well explained...

  • @user-ff5qh7ol7c
    @user-ff5qh7ol7c 4 года назад +2

    Thank you a lot!:)

    • @RawCoding
      @RawCoding  4 года назад

      Thanks for watching as always :)

  • @ArjunKRaj-vt4vw
    @ArjunKRaj-vt4vw 3 года назад +1

    Excellent video

  • @im1in260m
    @im1in260m 2 года назад

    An example of applying this to WPF would be excellent.

  • @aslam5915
    @aslam5915 3 года назад +1

    Great!Thanks a lot, I really needed this video. Could you plz make a video with recursion?

    • @RawCoding
      @RawCoding  3 года назад

      Cheers, what question do you have about recursion?

  • @youngliao5772
    @youngliao5772 4 года назад +2

    Cool guy, really appreciate your tutorial video

  • @needpiebad
    @needpiebad 4 года назад +2

    Thanks for the video really helpful. Hey, just wondering if it'd make any sense to do this for MVVM in terms of injecting the services into view models. I get that there's MVVM frameworks out there that handle this sort of things just wondering if this is roughly the way they'd handle it?

    • @RawCoding
      @RawCoding  4 года назад +2

      Cheers, MVVM is MVC but you have the additional VM (view model) basically mapping between your data and what you want to display. There should be no need to do dependency injection when you do the mapping. View Model is a dumb object, just data representation, same as the Model. Only the controller has functions and has services injected to do stuff to the models.

  • @pintileiciprian
    @pintileiciprian 3 года назад +1

    Yet another great video from Anton. Well done!
    P. S. What keyboard do you use? Sounds nice.

    • @RawCoding
      @RawCoding  3 года назад +1

      It’s filco convertible with mx brown switches

  • @kannanp4811
    @kannanp4811 3 года назад +1

    Thank you so much

    • @RawCoding
      @RawCoding  3 года назад

      Thank you for watching )

  • @parsalotfy
    @parsalotfy 3 года назад +1

    thank you for this video

    • @RawCoding
      @RawCoding  3 года назад

      Thank you for watching

  • @olegchuryukin158
    @olegchuryukin158 3 года назад +1

    Thank you for excellent video

    • @RawCoding
      @RawCoding  3 года назад

      Thank you for watching

  • @aloksaxena7905
    @aloksaxena7905 4 года назад +1

    It's good video, do not mind to say its very deep thought

  • @denisosipenko7413
    @denisosipenko7413 3 года назад +1

    Thanks a lot!
    You are realy cool! 👍👍👍👍👍

  • @fletcherdukakis934
    @fletcherdukakis934 3 года назад +1

    First off, awesome video!
    Couple questions. Can you briefly describe (or point me to some resources) describing why we needed to pass the Activator.CreateInstance as a delegate to the CreateImplementation method.
    Also, I understand that this isn’t production ready code, but with the Transient dependencies, wouldn’t the reference to the instance exist for the lifetime of the container. If an application creates multiple instances, they’d never actually get released /garbage collected. Am I understanding that correctly?

    • @RawCoding
      @RawCoding  3 года назад

      So I’ve just used an abstract factory pattern there without an interface and the factory is just a function (well in c# delegates are object but anyway) you want to look for abstract factory pattern.
      As I understand it the application has 1 DI container so as soon as the service that consumes a transient service is disposed of the transient service is disposed as well. Otherwise we would run out of memory eventually.

  • @Shinee3e
    @Shinee3e 4 года назад +1

    Thanks dude very clean and straightforward (implemenentatation lol) i would like you to make MVC video for sure thanks again;

    • @RawCoding
      @RawCoding  4 года назад +1

      Thanks and actually did make it check the playlist:)

    • @Shinee3e
      @Shinee3e 4 года назад +1

      @@RawCoding Oh sorry didn't notice, will check it soon.

  • @alexspeleers
    @alexspeleers 3 года назад +1

    Thnx for good explanation of creation of custom DI container. Can you use classic VS for coding - easier to migrate via code due to familiar interface?

    • @RawCoding
      @RawCoding  3 года назад

      Cheers, I think LinqPad is easier to explain things due to it’s visualisation features.

  • @mrreadit1767
    @mrreadit1767 Год назад +1

    Hi @Raw Coding, thanks for the video.
    1. Could you please elaborate on the scenario when the constructors of the services require some kind of data (authentication, etc.). So how would the static class Activator handle that while resolving? How is that handled in real world applications?
    2. A mention about other types of DI would have been helpful (not just using constructors) - Being a bit exhaustive about the possibilities/ variants.

    • @mrreadit1767
      @mrreadit1767 Год назад

      1. Just had a look at the MVC video in one of your playlists. I think the reflected data can be parsed after a check (binding?) (using System.Type class)

    • @RawCoding
      @RawCoding  Год назад

      If the service requires authentication, that service would have the httpcontext injected in to it, or some kind other service that loads authentication from the httpcontext and persists it through the scope.
      On point 2 - you can use reflection to assign things to fields or properties or in to functions.

  • @sitalsitoula6536
    @sitalsitoula6536 Год назад +1

    I am trying to wrap my head around the GetService method. Please tell me if my summary is right.
    Resolves the service. Using recursion. We want to resolve the service until it has no parameters.
    It essentially uses recursion to create necessary services starting from the ones that
    don't require parameters and use that to create another service in the chain until required service is generated.

  • @ultramasculine
    @ultramasculine 2 года назад +1

    I love u dude

  • @wisnu7734
    @wisnu7734 3 года назад +1

    i love your all videos....just to advice for you..please add graphics or animation while you explain something such analogy....

  • @algarud
    @algarud 3 года назад +1

    Man, you're so cool!

  • @lucianbumb6690
    @lucianbumb6690 3 года назад +1

    yes for MVC
    what is the performance impact of reflection?

    • @RawCoding
      @RawCoding  3 года назад +1

      Ehmmm, I can’t say, depends what parts of the api you are using

  • @emmepombar3328
    @emmepombar3328 2 года назад +1

    41:32 Awesome, but I see one flaw, if I am correct. If I try to create an implementation of an class Foo as singleton with a ctor Foo(Bar b), then every time, Bar b is resolved.

    • @RawCoding
      @RawCoding  2 года назад

      not sure what the flaw is?

  • @aaaaasssss884
    @aaaaasssss884 2 года назад +1

    Good stuff!!

  • @TheDogfighter13
    @TheDogfighter13 3 месяца назад

    anybody knows how to add scoped to this , i tried but it's not working right

  • @brahmcdude685
    @brahmcdude685 3 года назад +1

    why no interfaces? what is the use of a type without a base interface?

    • @RawCoding
      @RawCoding  3 года назад +1

      This is just an example

  • @cdeba9867
    @cdeba9867 3 года назад +1

    when do u stream?

    • @RawCoding
      @RawCoding  3 года назад

      Wed & Sun on twitch, you can ask for stream squad role on discord to get notified

  • @thesuperiorman8342
    @thesuperiorman8342 4 года назад +6

    Very strange. I've never come across the method Dump()

    • @RawCoding
      @RawCoding  4 года назад +7

      It's only available in LINQPad

  • @abdelrhmanahmed1378
    @abdelrhmanahmed1378 2 года назад +1

    What if we want to inject interfaces and then resolve them to a concrete implementation

    • @RawCoding
      @RawCoding  2 года назад +1

      Just cast the object

    • @abdelrhmanahmed1378
      @abdelrhmanahmed1378 2 года назад +1

      Can you elaborate more please

    • @RawCoding
      @RawCoding  2 года назад +1

      var myImp = (Implementation) myInterface

    • @abdelrhmanahmed1378
      @abdelrhmanahmed1378 2 года назад +1

      Thanks for replying the problem is , when we register we register and interface , so when getservice the list in the container containes the interface , the predicate that evaluate abd return the dependency, the change need to be done there right ?

    • @RawCoding
      @RawCoding  2 года назад

      I don’t understand

  • @parsalotfy
    @parsalotfy 3 года назад +1

    very rich content

  • @grafterallday3763
    @grafterallday3763 2 года назад +1

    Are you Scandinavian ?, I could be totally wrong but I'm sensing you are one.

  • @kopilkaiser8991
    @kopilkaiser8991 Год назад +1

    I lost understanding from the part where you add the parameter in the container. I will repeat and again try to understand. This dependency injection is complicated or I think you have gone a bit complex on trying to build a generic application which will be compatible with any type. I will not give up to give effort to understand.

    • @RawCoding
      @RawCoding  Год назад

      the container contains types that it knows how to create, if 1 type requires other types to be created, the container needs to know about those required types and how to inject them.

  • @cffee_
    @cffee_ 3 года назад +1

    Transient lifetime is an Anti Pattern, breaks single responsibility principle makes code behavior easier to break.

  • @RayanMADAO
    @RayanMADAO Год назад

    So much abstraction it makes me confused

  • @hydtechietalks3607
    @hydtechietalks3607 3 года назад +1

    whats this secret talk... speak louder dear!

    • @RawCoding
      @RawCoding  3 года назад

      Haha that was back when I just got the mic, was trying to configure it

  • @eclipsetutorialvideo
    @eclipsetutorialvideo 5 месяцев назад

    Impressive you did it without edit it seems :) You did Singleton and Transient, it would be good to know how Scoped is working as lifetime