PageRenderTime 48ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/Source/Bifrost/Resources/ResourceInterceptor.cs

#
C# | 58 lines | 27 code | 5 blank | 26 comment | 1 complexity | 68a357136658d097a7ec761d35a40b73 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. #region License
  2. //
  3. // Copyright (c) 2008-2012, DoLittle Studios and Komplett ASA
  4. //
  5. // Licensed under the Microsoft Permissive License (Ms-PL), Version 1.1 (the "License")
  6. // With one exception :
  7. // Commercial libraries that is based partly or fully on Bifrost and is sold commercially,
  8. // must obtain a commercial license.
  9. //
  10. // You may not use this file except in compliance with the License.
  11. // You may obtain a copy of the license at
  12. //
  13. // http://bifrost.codeplex.com/license
  14. //
  15. // Unless required by applicable law or agreed to in writing, software
  16. // distributed under the License is distributed on an "AS IS" BASIS,
  17. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  18. // See the License for the specific language governing permissions and
  19. // limitations under the License.
  20. //
  21. #endregion
  22. using Bifrost.Execution;
  23. using Castle.DynamicProxy;
  24. namespace Bifrost.Resources
  25. {
  26. /// <summary>
  27. /// Represents an <see cref="IInterceptor"/> for intercepting properties in a class implementing <see cref="IHaveResources"/>
  28. /// </summary>
  29. [Singleton]
  30. public class ResourceInterceptor : IInterceptor
  31. {
  32. readonly IResourceResolver _resolver;
  33. /// <summary>
  34. /// Initializes a new instance of <see cref="ResourceInterceptor"/>
  35. /// </summary>
  36. /// <param name="resolver"></param>
  37. public ResourceInterceptor(IResourceResolver resolver)
  38. {
  39. _resolver = resolver;
  40. }
  41. #pragma warning disable 1591 // Xml Comments
  42. public virtual void Intercept(IInvocation invocation)
  43. {
  44. var resourceName = string.Format("{0}.{1}", invocation.Method.DeclaringType.Name, invocation.Method.Name.Replace("get_", string.Empty));
  45. var value = _resolver.Resolve(resourceName);
  46. if( !string.IsNullOrEmpty(value) )
  47. invocation.ReturnValue = value;
  48. else
  49. invocation.Proceed();
  50. }
  51. #pragma warning restore 1591 // Xml Comments
  52. }
  53. }