Difference between revisions of "Override Default Services Implementation for AC Gold"
(→Castle Windsor IOC Container for AbleCommerce) |
|||
Line 1: | Line 1: | ||
− | == | + | == Introduction == |
− | + | AbleCommerce CommerceBuilder API implements many services for different features, for example Coupon Calculator service, Checkout service, Shipping and Tax quotes calculation services. And it uses Castle Windsor IOC Container to resolve the implementation of these services. This way its fairly easy to override the default implementation of these services with a custom implementation. | |
− | + | Each service have an interface, and the implementation follows that interface. For example the default implementation "CommerceBuilder.Services.ShipRateQuoteCalculator" for shipping rate calculation service implements the interface "CommerceBuilder.Services.IShipRateQuoteCalculator". So, you can provide your own custom implementation by implementation the respective service interface and update the Windsor config file to use your custom implementation. | |
− | + | It is not required to learn anything about Windsor or any other IOC container to override the default implementation of any service, however some information and help/tutorial links are provided for completion. | |
− | == | + | == How to Override Default Services Implementation for AC Gold == |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | == | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
Follow these steps to override any default services implementation with your custom implementation: | Follow these steps to override any default services implementation with your custom implementation: | ||
− | 1. Implement the respective service interface, and compile the code to some assembly. | + | 1. Implement the respective service interface, and compile the code to some assembly and copy the dll file at "~/App_Data/Bin/" folder under your website. |
2. Locate the "~/App_Data/windsor.config" file and open for editing using some text editor like Notepad. | 2. Locate the "~/App_Data/windsor.config" file and open for editing using some text editor like Notepad. | ||
Line 39: | Line 18: | ||
<pre><component id="MyCouponCalculator" service="CommerceBuilder.Services.ICouponCalculator, CommerceBuilder" | <pre><component id="MyCouponCalculator" service="CommerceBuilder.Services.ICouponCalculator, CommerceBuilder" | ||
type="MyCustomNamespace.MyCouponCalculator, MyCustomAssembly"/></pre> | type="MyCustomNamespace.MyCouponCalculator, MyCustomAssembly"/></pre> | ||
+ | |||
+ | The "service" attribute contains the assembly ("CommerceBuilder" in our case) and service interface information, while the "type" attribute contains information about your custom service implementing class and assembly. | ||
4. For store websites configured as web applications, you can implement your custom services under "~/Code/" folder instead creating a separate assembly project for it. In this case you can use "AbleCommerce.Code" namespace. For example: | 4. For store websites configured as web applications, you can implement your custom services under "~/Code/" folder instead creating a separate assembly project for it. In this case you can use "AbleCommerce.Code" namespace. For example: | ||
Line 48: | Line 29: | ||
== List of Services Resolvable by Windsor IOC Container == | == List of Services Resolvable by Windsor IOC Container == | ||
− | |||
− | CommerceBuilder.Catalog. | + | 1. CommerceBuilder.Catalog.IUrlGenerator |
− | + | Interface to be implemented by catalog URL Generator providers | |
− | |||
− | CommerceBuilder. | + | 2. CommerceBuilder.Catalog.IUrlRewriter |
− | + | Interface that is to be implemented by URL Rewrite providers | |
− | |||
− | CommerceBuilder. | + | 3. CommerceBuilder.Catalog.IUrlCache |
− | + | Url Caching service interface | |
− | |||
− | CommerceBuilder. | + | 4. CommerceBuilder.Eventing.IStoreEventsHandler |
− | + | Interface to be implemented by store events handler | |
− | |||
− | CommerceBuilder. | + | 5. CommerceBuilder.Payments.IGiftCertKeyProvider |
− | + | Interface that a Gift Certificate Key Provider must implement | |
− | |||
− | CommerceBuilder.Services. | + | 6. CommerceBuilder.Services.ICouponCalculator |
− | + | CouponCalculator service interface | |
− | |||
− | CommerceBuilder.Services. | + | 7. CommerceBuilder.Services.IInventoryManager |
− | + | Interface for inventory management services. | |
− | |||
− | CommerceBuilder. | + | 8. CommerceBuilder.Services.IAffiliateCalculator |
− | + | Service Interface for calculating affiliate commissions. | |
− | |||
− | CommerceBuilder.Services. | + | 9. CommerceBuilder.Services.IBasketCalculator |
− | + | Defines a service for performing basket calculations. | |
− | CommerceBuilder.Utility.IAddressFormatter | + | |
+ | 10. CommerceBuilder.Services.Checkout.IBasketService | ||
+ | |||
+ | Service interface for pre-checkout logic and basket calculations | ||
+ | |||
+ | |||
+ | 11. CommerceBuilder.Services.Checkout.ICheckoutService | ||
+ | |||
+ | Service interface for checkout logic and calculations | ||
+ | |||
+ | |||
+ | 12. CommerceBuilder.Services.IDiscountCalculator | ||
+ | |||
+ | Service interface for discount calculator | ||
+ | |||
+ | |||
+ | 13. CommerceBuilder.Services.Membership.IUserLocator | ||
+ | |||
+ | Defines the contract for a user locator. | ||
+ | |||
+ | |||
+ | 14. CommerceBuilder.Services.IOrderCalculator | ||
+ | |||
+ | Defines a service for performing order calculations. | ||
+ | |||
+ | |||
+ | 15. CommerceBuilder.Services.IOrderService | ||
+ | |||
+ | Processes business logic related to orders. | ||
+ | |||
+ | |||
+ | 16. CommerceBuilder.Services.IPaymentMethodProvider | ||
+ | |||
+ | Defines a service for payment method providers. | ||
+ | |||
+ | |||
+ | 17. CommerceBuilder.Services.IShipRateQuoteCalculator | ||
+ | |||
+ | Defines a service for calculation of ship rate quote | ||
+ | |||
+ | |||
+ | 18. CommerceBuilder.Services.IVolumeDiscountProvider | ||
+ | |||
+ | Defines a service for validating volume discounts. | ||
+ | |||
+ | |||
+ | 19. CommerceBuilder.Services.IFullTextSearchService | ||
+ | |||
+ | FTS service interface | ||
+ | |||
+ | |||
+ | 20. CommerceBuilder.Services.IMaintenanceWorker | ||
+ | |||
+ | Runs all maintenance routines for the current store context | ||
+ | |||
+ | |||
+ | 21. CommerceBuilder.Services.IPageTracker | ||
+ | |||
+ | Page tracking service contract | ||
+ | |||
+ | |||
+ | 22. CommerceBuilder.Services.ISQLFullTextSearchService | ||
+ | |||
+ | SQL Full Text Search (FTS) service interface | ||
+ | |||
+ | |||
+ | 23. CommerceBuilder.Services.IOrderStatusService | ||
+ | |||
+ | Provides order status get/update services | ||
+ | |||
+ | |||
+ | 24. CommerceBuilder.Services.IStoreLocator | ||
+ | |||
+ | Store Locator service interface | ||
+ | |||
+ | |||
+ | 25. CommerceBuilder.Services.IStoreSettingsProvider | ||
+ | |||
+ | Store Settings Provider service interface | ||
+ | |||
+ | |||
+ | 26. CommerceBuilder.Shipping.IPostalCodeValidator | ||
+ | |||
+ | Postal code validator service | ||
+ | |||
+ | |||
+ | 27. CommerceBuilder.Seo.IRedirectService | ||
+ | |||
+ | Interface for SEO Redirect Service | ||
+ | |||
+ | |||
+ | 28. CommerceBuilder.Utility.IAddressFormatter | ||
+ | |||
+ | Address formater service | ||
+ | |||
+ | == Inversion of Control == | ||
+ | |||
+ | Inversion of Control is a principle used by frameworks as a way to allow developers to extend the framework or create applications using it. The basic idea is that the framework is aware of the programmer's objects and makes invocations on them. | ||
+ | |||
+ | This is the opposite of using an API, where the developer's code makes the invocations to the API code. Hence, frameworks invert the control: it is not the developer code that is in charge, instead the framework makes the calls based on some stimulus. | ||
+ | |||
+ | You have probably been in situations where you have developed under the light of this principle, even though you were not aware of it. | ||
+ | |||
+ | == Inversion of Control Container == | ||
+ | |||
+ | An Inversion of Control Container uses the principle stated above to (in a nutshell) manage classes. That is, their creation, destruction, lifetime, configuration, and dependencies. This way classes do not need to obtain and configure the classes they depend on. This dramatically reduces coupling in a system and, as a consequence, simplifies reuse and testability. | ||
+ | |||
+ | There is some confusion created by people that think that 'Inversion of Control' is a synonym for 'Inversion of Control Container'. As stated, Inversion of control is a broader principle. | ||
+ | |||
+ | Often people think that it is all about "injection", and broadcast that this is the primary purpose of IoC containers. In fact, "injection" is a consequence, a means to decouple, not the primary purpose. | ||
+ | http://docs.castleproject.org/Windsor.Inversion-of-Control.ashx | ||
+ | |||
+ | == Castle Windsor IOC Container == | ||
+ | For information about Castle Windsor IOC Container, help and tutorials check the official documentation: | ||
+ | http://docs.castleproject.org/Windsor.MainPage.ashx | ||
+ | |||
+ | == Asp.Net Tutorial == | ||
+ | |||
+ | http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx |
Revision as of 13:16, 13 August 2013
Contents
Introduction
AbleCommerce CommerceBuilder API implements many services for different features, for example Coupon Calculator service, Checkout service, Shipping and Tax quotes calculation services. And it uses Castle Windsor IOC Container to resolve the implementation of these services. This way its fairly easy to override the default implementation of these services with a custom implementation.
Each service have an interface, and the implementation follows that interface. For example the default implementation "CommerceBuilder.Services.ShipRateQuoteCalculator" for shipping rate calculation service implements the interface "CommerceBuilder.Services.IShipRateQuoteCalculator". So, you can provide your own custom implementation by implementation the respective service interface and update the Windsor config file to use your custom implementation.
It is not required to learn anything about Windsor or any other IOC container to override the default implementation of any service, however some information and help/tutorial links are provided for completion.
How to Override Default Services Implementation for AC Gold
Follow these steps to override any default services implementation with your custom implementation:
1. Implement the respective service interface, and compile the code to some assembly and copy the dll file at "~/App_Data/Bin/" folder under your website.
2. Locate the "~/App_Data/windsor.config" file and open for editing using some text editor like Notepad.
3. Define your custom service implementations in "~/App_Data/windsor.config" file. For example if you have a custom coupon calculator implementation, you can define it there like this:
<component id="MyCouponCalculator" service="CommerceBuilder.Services.ICouponCalculator, CommerceBuilder" type="MyCustomNamespace.MyCouponCalculator, MyCustomAssembly"/>
The "service" attribute contains the assembly ("CommerceBuilder" in our case) and service interface information, while the "type" attribute contains information about your custom service implementing class and assembly.
4. For store websites configured as web applications, you can implement your custom services under "~/Code/" folder instead creating a separate assembly project for it. In this case you can use "AbleCommerce.Code" namespace. For example:
<component id="MyShipRateQuoteCalculator" service="CommerceBuilder.Services.IShipRateQuoteCalculator, CommerceBuilder" type="AbleCommerce.Code.MyShipRateQuoteCalculator, AbleCommerce"/>
After changing/updating the "~/App_Data/windsor.config" file, restart the IIS, and it will start using your custom service implementation.
List of Services Resolvable by Windsor IOC Container
1. CommerceBuilder.Catalog.IUrlGenerator
Interface to be implemented by catalog URL Generator providers
2. CommerceBuilder.Catalog.IUrlRewriter
Interface that is to be implemented by URL Rewrite providers
3. CommerceBuilder.Catalog.IUrlCache
Url Caching service interface
4. CommerceBuilder.Eventing.IStoreEventsHandler
Interface to be implemented by store events handler
5. CommerceBuilder.Payments.IGiftCertKeyProvider
Interface that a Gift Certificate Key Provider must implement
6. CommerceBuilder.Services.ICouponCalculator
CouponCalculator service interface
7. CommerceBuilder.Services.IInventoryManager
Interface for inventory management services.
8. CommerceBuilder.Services.IAffiliateCalculator
Service Interface for calculating affiliate commissions.
9. CommerceBuilder.Services.IBasketCalculator
Defines a service for performing basket calculations.
10. CommerceBuilder.Services.Checkout.IBasketService
Service interface for pre-checkout logic and basket calculations
11. CommerceBuilder.Services.Checkout.ICheckoutService
Service interface for checkout logic and calculations
12. CommerceBuilder.Services.IDiscountCalculator
Service interface for discount calculator
13. CommerceBuilder.Services.Membership.IUserLocator
Defines the contract for a user locator.
14. CommerceBuilder.Services.IOrderCalculator
Defines a service for performing order calculations.
15. CommerceBuilder.Services.IOrderService
Processes business logic related to orders.
16. CommerceBuilder.Services.IPaymentMethodProvider
Defines a service for payment method providers.
17. CommerceBuilder.Services.IShipRateQuoteCalculator
Defines a service for calculation of ship rate quote
18. CommerceBuilder.Services.IVolumeDiscountProvider
Defines a service for validating volume discounts.
19. CommerceBuilder.Services.IFullTextSearchService
FTS service interface
20. CommerceBuilder.Services.IMaintenanceWorker
Runs all maintenance routines for the current store context
21. CommerceBuilder.Services.IPageTracker
Page tracking service contract
22. CommerceBuilder.Services.ISQLFullTextSearchService
SQL Full Text Search (FTS) service interface
23. CommerceBuilder.Services.IOrderStatusService
Provides order status get/update services
24. CommerceBuilder.Services.IStoreLocator
Store Locator service interface
25. CommerceBuilder.Services.IStoreSettingsProvider
Store Settings Provider service interface
26. CommerceBuilder.Shipping.IPostalCodeValidator
Postal code validator service
27. CommerceBuilder.Seo.IRedirectService
Interface for SEO Redirect Service
28. CommerceBuilder.Utility.IAddressFormatter
Address formater service
Inversion of Control
Inversion of Control is a principle used by frameworks as a way to allow developers to extend the framework or create applications using it. The basic idea is that the framework is aware of the programmer's objects and makes invocations on them.
This is the opposite of using an API, where the developer's code makes the invocations to the API code. Hence, frameworks invert the control: it is not the developer code that is in charge, instead the framework makes the calls based on some stimulus.
You have probably been in situations where you have developed under the light of this principle, even though you were not aware of it.
Inversion of Control Container
An Inversion of Control Container uses the principle stated above to (in a nutshell) manage classes. That is, their creation, destruction, lifetime, configuration, and dependencies. This way classes do not need to obtain and configure the classes they depend on. This dramatically reduces coupling in a system and, as a consequence, simplifies reuse and testability.
There is some confusion created by people that think that 'Inversion of Control' is a synonym for 'Inversion of Control Container'. As stated, Inversion of control is a broader principle.
Often people think that it is all about "injection", and broadcast that this is the primary purpose of IoC containers. In fact, "injection" is a consequence, a means to decouple, not the primary purpose. http://docs.castleproject.org/Windsor.Inversion-of-Control.ashx
Castle Windsor IOC Container
For information about Castle Windsor IOC Container, help and tutorials check the official documentation: http://docs.castleproject.org/Windsor.MainPage.ashx
Asp.Net Tutorial
http://docs.castleproject.org/Windsor.Windsor-tutorial-ASP-NET-MVC-3-application-To-be-Seen.ashx