adding IProviderFactory for future plugability or abstract-factory pattern implementation.
adding new test cases for ProviderFactory.Create method.
refactoring - removing unused usings.