/src/LinFu.IoC/Factories/FactoryAdapter.cs

http://github.com/philiplaureano/LinFu · C# · 64 lines · 29 code · 10 blank · 25 comment · 6 complexity · c62399b3ff4de5231aebbbf7ba150230 MD5 · raw file

  1. using LinFu.IoC.Interfaces;
  2. namespace LinFu.IoC
  3. {
  4. /// <summary>
  5. /// An adapter that converts strongly-typed IFactory&lt;T&gt;
  6. /// instances into an equivalent IFactory instance.
  7. /// </summary>
  8. /// <typeparam name="T">The service type to create.</typeparam>
  9. public class FactoryAdapter<T> : IFactory, IFactory<T>
  10. {
  11. private readonly object _factory;
  12. /// <summary>
  13. /// Creates the factory adapter using the given
  14. /// IFactory&lt;T&gt; instance.
  15. /// </summary>
  16. /// <param name="factory">
  17. /// The factory instance that
  18. /// will be called every time the <see cref="IFactory.CreateInstance" /> method
  19. /// is called.
  20. /// </param>
  21. public FactoryAdapter(object factory)
  22. {
  23. _factory = factory;
  24. }
  25. /// <summary>
  26. /// The factory that will create the service instance.
  27. /// </summary>
  28. public IFactory<T> Factory => _factory as IFactory<T>;
  29. /// <summary>
  30. /// Overridden. Uses the strongly-typed factory
  31. /// to create the service instance every time
  32. /// the <see cref="IFactory.CreateInstance" /> method
  33. /// is called.
  34. /// </summary>
  35. /// <param name="request">The <see cref="IFactoryRequest" /> instance that describes the requested service.</param>
  36. /// <returns>An object instance that represents the service to be created. This cannot be <c>null</c>.</returns>
  37. public object CreateInstance(IFactoryRequest request)
  38. {
  39. if (_factory == null)
  40. return default(T);
  41. var factory = _factory as IFactory<T>;
  42. if (factory == null)
  43. return default(T);
  44. return factory.CreateInstance(request);
  45. }
  46. T IFactory<T>.CreateInstance(IFactoryRequest request)
  47. {
  48. var factory = _factory as IFactory<T>;
  49. if (factory == null)
  50. return default(T);
  51. return factory.CreateInstance(request);
  52. }
  53. }
  54. }