Unity Framework
-
Upload
krantisinh-deshmukh -
Category
Technology
-
view
631 -
download
3
description
Transcript of Unity Framework
UNITY FRAMEWORK
- KRANTISINH DESHMUKH
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.
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.
• 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 ?
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.
THE ACTUAL PROCESS
Person ClassKids ClassPass object to
Person
Inversion of
Control
Container
[ A Third Party
Class ]
Create object of
Kids Class
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.
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.
Dependency Injection
Constructor
Injection
Setter
Injection
Method Call
Injection
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.
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).
• 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.
{
}
}
• STEP 3: MAKE A REFERENCE OF THE INTERFACE IN THE PERSON CLASS.
• 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.
• STEP 5: NOW TO USE A THIRD-PARTY CLASS AT THE CLIENT-SIDE.
THE IOC PROCESS IN ONE SHOT
Person ClassKids ClassPass object to
Person
IOC Class
Factory
Method
Create object of
Kids Class
IBusinessLogic
ACHIEVING IOC THROUGH UNITY FRAMEWORK IN MVC4
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
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
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]
CREATE A NEW
ASP.NET MVC 4
APPLICATION
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
• REFERENCES TO THE PROJECT WILL GET
AUTOMATICALLY ADDED ONCE WE EXECUTE
PM> INSTALL-PACKAGE UNITY.MVC4 IN
PACKAGE MANAGER CONSOLE.
ADDING REFERENCES
CREATE A REPOSITORY FOR DATA
PRODUCT CLASS INTERFACE FOR PRODUCTREPOSITORY
IMPLEMENT
IPRODUCT
REPOSITORY
IN PRODUCT
REPOSITORY
CLASS
REGISTER THE
DEPENDENCY IN
BOOTSTRAPPER.CS FILE
INJECT DEPENDENCY
IN THE
CONSTRUCTOR OF
THE CONTROLLER
SETUP
DEPENDENCY
INJECTION WITH
UNITY IN
GLOBAL.ASAX.CS
FINALLY,
GENERATE THE
VIEW
OUTPUT
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.
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.
Thank You…