asp.net core dependency injection & unit testing

Post on 15-Jul-2022

16 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ASP.NET CoreDependency Injection& Unit Testing

Robert Hakensoftware architect, HAVIT, s.r.o.haken@havit.cz, @RobertHakenMicrosoft MVP: Development, MCT, MCSD

OCHUTNÁVKA

ASP.NET Core - MVC6 ControllerIEmailSender Dependency Injection demo

DependencyInjection

"Dependency Injection is a set of software design principles and patternsthat enable us to develop loosely coupled code."

Mark Seeman

DependencyInjectionBenefits

loosely coupled code=>

• Late-binding

• Extensibility

• ParallelDevelopment

• Maintainability

• Testability

DEMO

Price Resolver - Dependency Injection, Unit-Testing

"Good" Unit Test

• automated+ repeatable

• fully isolated

• consistent in itsresults

• runsquickly

• full control of the unit under test(alldependencies)

• relevanttomorrow

• easyto implement

• able to run it at the push of a button

• iffails=> easy to detect what was expected

DependencyInjectionContainers

• ObjectComposition

• ObjectLifetime

• Interception

• Code-based/ XML-basedconfiguration

– Auto-wiring, convention-basedconfiguration, ...

ASP.NET CoreDI "Container" -Register

• Startup.cs– Configure[Env]Services(IServiceCollection services)

• API -Lifestyles– services.AddTransient<TAbstraction, TImplementation>()

– services.AddScoped<TAbstraction, TImplementation>()

– services.AddSingleton<TAbstraction, TImplementation>()

– services.AddSingleton<TAbstraction>(instance)

– plus factory-methodverze

DEMO

ASP.NET Core DI - LifeStyles

ASP.NET CoreDI "Container" - Injection

Controllers

– constructorinjection

– Action-methodinjection[FromServices]

Views

– propertyinjection @inject TService PropertyName

Models

– propertyinjection [FromServices]

Startup: Configure()

– methodinjection

ASP.NET CoreDI "Container" - InjectionII.

Middleware

– constructorinjection

– methodinjectionInvoke(...)

Filters

– "attribute" injection[ServiceFilter(typeof(...))]

– "attribute" injection[TypeFilter(typeof(...))]

Other

– constructorinjection

Q & A

top related