0% found this document useful (0 votes)
354 views4 pages

Dependency Injection in .Net Core Notes

Dependency injection implements inversion of control and the dependency inversion principle. It promotes loose coupling, logical abstraction, improved testability and cleaner code. In .NET Core, services are registered at startup and resolved from the container at runtime. Common things to register include services with dependencies, while primitives and POCOs are generally not registered. Service lifetimes include transient, singleton, and scoped services. Avoid captive dependencies by ensuring a service's lifetime is not shorter than its dependencies.

Uploaded by

Haseeb
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
354 views4 pages

Dependency Injection in .Net Core Notes

Dependency injection implements inversion of control and the dependency inversion principle. It promotes loose coupling, logical abstraction, improved testability and cleaner code. In .NET Core, services are registered at startup and resolved from the container at runtime. Common things to register include services with dependencies, while primitives and POCOs are generally not registered. Service lifetimes include transient, singleton, and scoped services. Avoid captive dependencies by ensuring a service's lifetime is not shorter than its dependencies.

Uploaded by

Haseeb
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

Dependency Injection implements two related concepts

 Inversion of control
 Dependency inversion principal

Benefits:
 Promotes loose coupling of components.
 Promotes logical abstraction of components.
 Improve unit testing
 Cleaner and more readable code.

Microsoft Dependency Injection Container:

 Services are registered at startup and resolve from the container at run time.
 The container is responsible of creating and disposing of instances of required services on
demand

What To register with DI:


 Locate new keyword
 Is the object a dependency
 Apply dependency inversion principal
 Register the service
 Rins and repeat
What NOT To register with DI:
 POCOS which only return model to make some view.
 Primitive types and strings.

Injection Configuration in .Net Core:


 Create a POCO class which hold the object of configuration like
o Public bool EnableEmailFunctionality
 Then add those variables in json file
 Register the configuration in ConfigureService Method and Get Section of configuration
 Inject the Ioption in Controller or any where you need like this and get value

Service Lifetime:

o Transient Services:
o Not required to be thread safe
o Potentially less efficient
o Easiest to reason about
o SingleTon Services:
o Generally more performant
o Must be thread-safe
o Suited to functional stateless service. Like function accept input and return output
and no shared state is used.
o Scoped Services:
o Create scoped services per request e.g dbContext

Avoiding Captive Dependencies (Chose proper service lifetime)


o A service should not depend on a service with a lifetime shorter than its own.

o
Scope Validation
o It is introduced in Core 2.0.
o Enables by default for development
o Validate container scopes at startup

Service Descriptors:
It contain information about registered services.

Multiple Registration:
In multiple registration case for the same contract. It’s the last registration always wins. Consider using
TryAdd method.

TryAdd and TrayAddEnumerable:


Both will ensure that no duplication occurred while registering services.

Replace And Remove Method:


o Use replace method to replace the already registered service with new one. But it accept service
descriptor.
o Use remove method to remove the service registration

Registering Multiple Implementation Of An interface:


If one interface has multiple implementation then inject using IEnumerable in constructor so that It will
attempt to resolve all implementation of an interface

Open Generic Registeration:


This allow us to define single registration which can handle any type arguments of contract

Cleaning Registration Of Dependency Injection Services:


o Create another class with extension method under the namespace of
Microsoft.Extension.DependencyInjection which will return IServiceCollection

Action Injection:
Only work when action specifies the dependency invoked to handle the request.
Middleware Injection:

Factory Based Middleware:


Factory based middleware is constructed once per request.

Scrutor:
It’s a 3rd party library which full fills two gaps that Microsoft lacks
o Scanning Assemblies
o Using the decorator pattern

You might also like