Unity Framework

35
UNITY FRAMEWORK - KRANTISINH DESHMUKH

description

Going for building a .Net application ??? Certainly, you would want your application to be loosely coupled to make it more maintainable and testable. This presentation will guide you to achieve the much needed loose coupling in an MVC 4 application using Microsoft's Unity Framework. Also, it will help you understand the core of Inversion Control Technique and Dependency Injection Pattern.

Transcript of Unity Framework

Page 1: Unity Framework

UNITY FRAMEWORK

- KRANTISINH DESHMUKH

Page 2: Unity Framework

WHAT IS IT ?

• THE UNITY FRAMEWORK OR UNITY APPLICATION BLOCK IS A LIGHTWEIGHT EXTENSIBLE

DEPENDENCY INJECTION CONTAINER WITH SUPPORT FOR CONSTRUCTOR, PROPERTY, AND

METHOD CALL INJECTION.

• IT’S A VERY GOOD WAY TO ACHIEVE LOOSE COUPLING IN THE APPLICATION. LOOSELY

COUPLED APPLICATIONS ARE VERY EASY TO MAINTAIN AND TEST.

• IT PROVIDES INVERSION OF CONTROL (IOC) FUNCTIONALITY BY ALLOWING INJECTION OF

PRECONFIGURED OBJECTS INTO CLASSES BUILT BY THE APPLICATION BLOCK.

Page 3: Unity Framework

WHY IOC ?

• ASSUME THERE IS A CLASS CALLED "KIDS.CS". THE PURPOSE OF THIS CLASS IS TO MAINTAIN

THE NAME AND AGE OF THE CHILDREN OF A SPECIFIC PERSON.

• NOW THE REQUIREMENT IS THAT EACH PERSON HAS KIDS. SO AT THE TIME OF CREATION OF A

PERSON, THE ASSOCIATED KIDS SHOULD ALSO BE CREATED. SO THIS MAY BE DONE BY THE

FOLLOWING CODE.

Page 4: Unity Framework
Page 5: Unity Framework
Page 6: Unity Framework

• WHEN AN OBJECT NEEDS ANOTHER OBJECT THEN IT IS SAID THAT THE OBJECT IS DEPENDENT ON THE

OTHER OBJECT. IN THIS CASE, KID’S CLASS IS DEPENDENT ON PERSON’S CLASS.

PROBLEMS IN THE ABOVE APPROACH:

• HERE THE KIDS OBJECT HAS BEEN CREATED INSIDE THE CONSTRUCTOR OF THE PERSON CLASS. SO, HERE

COUPLING IS VERY HIGH OR TIGHT.

• IF DUE TO ANY REASON THE CREATION OF THE KIDS OBJECT FAILS THEN THE PERSON CLASS ALSO

CANNOT BE INSTANTIATED IN ITS CONSTRUCTOR ITSELF.

• IF THE PERSON OBJECT CLASS IS KILLED THEN BY DEFAULT THE OBJECT OF THE KIDS CLASS IS ALSO KILLED.

• IF A NEW TYPE OF KIDS HAS BEEN CREATED OR A NEW PROPERTY IS BEING ADDED IN THE KIDS CLASS

THEN IT NEEDS CODE MODIFICATION IN THE PERSON CLASS ALSO.

WHY IOC ?

Page 7: Unity Framework

IOC

• THE PREVIOUS PROBLEM CAN BE SOLVED IF WE ASSIGN THE TASK OF OBJECT CREATION TO A

THIRD PARTY.

• SO, ASSIGNING THE TASK OF OBJECT CREATION TO A THIRD-PARTY IS SOMEHOW INVERTING

CONTROL TO THE THIRD-PARTY. AND THIS IS CALLED "INVERSION OF CONTROL" (IOC).

• IN OTHER WORDS, THE INVERSION OF CONTROL DESIGN PATTERN COULD BE DEFINED AS

DELEGATING THE TASK OF OBJECT CREATION TO A THIRD-PARTY, TO DO LOW COUPLING

AMONG OBJECTS AND TO MINIMIZE DEPENDENCY AMONG OBJECTS.

Page 8: Unity Framework

THE ACTUAL PROCESS

Person ClassKids ClassPass object to

Person

Inversion of

Control

Container

[ A Third Party

Class ]

Create object of

Kids Class

Page 9: Unity Framework

IOC

SO IOC SAYS:

• THE MAIN CLASS (PESRON.CS) COMPOSES ANOTHER CLASS THAT SHOULD NOT DIRECTLY

DEPEND ON THE IMPLEMENTATION OF THE OTHER CLASS (KIDS.CS).

• THERE SHOULD BE AN ABSTRACTION AMONG CLASSES AND THE CLASSES SHOULD FULLY

DEPEND UPON THAT ABSTRACTION.

• ABSTRACTION COULD BE EITHER AN INTERFACE OR AN ABSTRACT CLASS.

Page 10: Unity Framework

DEPENDENCY INJECTION

DEPENDENCY INJECTION IS THE WAY TO IMPLEMENT IOC.

IT PROVIDES FOLLOWING BENEFITS:

• ELIMINATES TIGHT COUPLING AMONG OBJECTS.

• MAKES THE OBJECT AND THE APPLICATION MORE FLEXIBLE.

• FACILITATES CREATION OF MORE LOOSELY COUPLED OBJECTS AND THEIR DEPENDENCIES.

• ISOLATES IMPLEMENTATION OF AN OBJECT FROM THE CONSTRUCTION OF THE OBJECT ON WHICH

IT DEPENDS.

Page 11: Unity Framework

Dependency Injection

Constructor

Injection

Setter

Injection

Method Call

Injection

Page 12: Unity Framework

CONSTRUCTOR INJECTION

• HERE AN OBJECT REFERENCE WOULD BE PASSED TO THE CONSTRUCTOR OF THE BUSINESS

CLASS PERSON.

• IN THIS CASE, SINCE THE PERSON CLASS DEPENDS ON THE KIDS CLASS, SO THE REFERENCE OF

THE KIDS CLASS WILL BE PASSED TO THE CONSTRUCTOR OF THE PERSON CLASS.

• SO, AT THE TIME OF OBJECT CREATION OF THE PERSON CLASS, THE KIDS CLASS WILL BE

INSTANTIATED.

• THE FOLLOWING IS THE PROCEDURE TO IMPLEMENT CONSTRUCTOR INJECTION.

Page 13: Unity Framework

CONSTRUCTOR INJECTION

• STEP 1: CREATE AN INTERFACE IBUSINESSLOGIC.CS

THIS INTERFACE WOULD BE IMPLEMENTED BY A BUSINESS LOGIC CLASS. HERE THE KIDS CLASS IS

A BUSINESS LOGIC CLASS.

ONLY THE METHODS OF THE INTERFACE WILL BE EXPOSED TO THE BUSINESS LOGIC CLASS

(PERSON).

Page 14: Unity Framework

• STEP 2: IMPLEMENT AN INTERFACE TO THE KIDS CLASS. AN OBJECT OF THE KIDS CLASS WILL

BE REFERENCED BY THE PERSON CLASS. SO THIS CLASS NEEDS TO IMPLEMENT THE INTERFACE.

{

}

}

Page 15: Unity Framework

• STEP 3: MAKE A REFERENCE OF THE INTERFACE IN THE PERSON CLASS.

Page 16: Unity Framework

• STEP 4: NOW TO CREATE A THIRD-PARTY CLASS WHERE THE CREATION OF THE OBJECT WILL BE

DONE. IN THE CODE BELOW IS A FACTORYMETHOD() METHOD WHERE THE OBJECT IS GETTING

CREATED.

Page 17: Unity Framework

• STEP 5: NOW TO USE A THIRD-PARTY CLASS AT THE CLIENT-SIDE.

Page 18: Unity Framework

THE IOC PROCESS IN ONE SHOT

Person ClassKids ClassPass object to

Person

IOC Class

Factory

Method

Create object of

Kids Class

IBusinessLogic

Page 19: Unity Framework

ACHIEVING IOC THROUGH UNITY FRAMEWORK IN MVC4

Page 20: Unity Framework

I only have to

do all the

tasks….

Why did

God make

me Controller

???

MVC CONTROLLER

WITHOUT UNITY

Don’t

worry…

I’ll handle

the object

creation… U

take care of

the rest…

UNITY

MVC CONTROLLERWITH UNITY

Page 21: Unity Framework

PHASES OF OBJECT CREATION

• REGISTER - REGISTER THE TYPE OF THE OBJECT THAT HAS TO BE INSTANTIATED WITH

UNITY CONTAINER

• RESOLVE – LET UNITY CONTAINER KNOW THAT NOW IS THE TIME TO INSTANTIATE

THE OBJECT

• DISPOSE – GET RID OF THE OBJECT IF ITS ROLE IS OVER

Page 22: Unity Framework

ACHIEVING IOC THROUGH UNITY FRAMEWORK IN MVC4

• WE CAN ACHIEVE IOC THROUGH UNITY FRAMEWORK IN 4 SIMPLE STEPS:

1. INSTALL UNITY THROUGH PACKAGE MANAGER CONSOLE.

2. CREATE UNITY CONTAINER IN BOOTSTARPPER .CS FILE. REGISTER THE DEPENDENCIES.

3. INJECT THE DEPENDENCY IN CONTROLLER THROUGH CONSTRUCTOR

4. IN GLOBAL.ASAX.CS , SET UP THE DEPENDENCY INJECTION THROUGH UNITY [CALL BOOTSTRAPPER

CLASS]

Page 23: Unity Framework

CREATE A NEW

ASP.NET MVC 4

APPLICATION

Page 24: Unity Framework

GETTING STARTED WITH UNITY FRAMEWORK

• UNITY 3.0 COMES UNDER NUGET PACKAGE IN VS2012. TO INSTALL, EXECUTE

BELOW COMMAND IN PACKAGE MANAGER CONSOLE:

• PM> INSTALL-PACKAGE UNITY.MVC4

Page 25: Unity Framework

• REFERENCES TO THE PROJECT WILL GET

AUTOMATICALLY ADDED ONCE WE EXECUTE

PM> INSTALL-PACKAGE UNITY.MVC4 IN

PACKAGE MANAGER CONSOLE.

ADDING REFERENCES

Page 26: Unity Framework

CREATE A REPOSITORY FOR DATA

PRODUCT CLASS INTERFACE FOR PRODUCTREPOSITORY

Page 27: Unity Framework

IMPLEMENT

IPRODUCT

REPOSITORY

IN PRODUCT

REPOSITORY

CLASS

Page 28: Unity Framework

REGISTER THE

DEPENDENCY IN

BOOTSTRAPPER.CS FILE

Page 29: Unity Framework

INJECT DEPENDENCY

IN THE

CONSTRUCTOR OF

THE CONTROLLER

Page 30: Unity Framework

SETUP

DEPENDENCY

INJECTION WITH

UNITY IN

GLOBAL.ASAX.CS

Page 31: Unity Framework

FINALLY,

GENERATE THE

VIEW

Page 32: Unity Framework

OUTPUT

Page 33: Unity Framework

3 WHYS…

• WHY UNITY FRAMEWORK ?

TO IMPLEMENT IOC THROUGH DEPENDENCY INJECTION

• WHY IMPLEMENT IOC?

TO ACHIEVE LOOSE COUPLING IN THE APPLICATION

• WHY LOOSE COUPLING ?

TO MAKE THE APPLICATION MORE MAINTAINABLE AND TESTABLE

• SO, USE OF UNITY FRAMEWORK IN OUR APPLICATION MEANS OUR APPLICATION IS MORE

MAINTAINABLE AND TESTABLE.

Page 34: Unity Framework

DON’T USE UNITY FRAMEWORK IN FOLLOWING SCENARIOS

• YOUR OBJECTS AND CLASSES HAVE NO DEPENDENCIES ON OTHER OBJECTS OR

CLASSES.

• YOUR DEPENDENCIES ARE VERY SIMPLE AND DO NOT REQUIRE ABSTRACTION.

Page 35: Unity Framework

Thank You…