diff --git a/Blarg.GameFramework/Blarg.GameFramework.csproj b/Blarg.GameFramework/Blarg.GameFramework.csproj index 2ff2ffe..c555f52 100644 --- a/Blarg.GameFramework/Blarg.GameFramework.csproj +++ b/Blarg.GameFramework/Blarg.GameFramework.csproj @@ -159,6 +159,7 @@ + diff --git a/Blarg.GameFramework/ServiceContainer.cs b/Blarg.GameFramework/ServiceContainer.cs index 18f8e28..5ce5f08 100644 --- a/Blarg.GameFramework/ServiceContainer.cs +++ b/Blarg.GameFramework/ServiceContainer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Blarg.GameFramework.Support; namespace Blarg.GameFramework { @@ -22,7 +23,6 @@ namespace Blarg.GameFramework var type = service.GetType(); if (type.IsValueType) throw new ArgumentException("ServiceContainer cannot be used with value types.", "service"); - if (_services.ContainsKey(type)) throw new InvalidOperationException("Service object of this type has already been registered."); @@ -41,18 +41,15 @@ namespace Blarg.GameFramework if (type.IsValueType) throw new ArgumentException("ServiceContainer cannot be used with value types.", "service"); - object registeredService; - _services.TryGetValue(type, out registeredService); + var registeredService = _services.Get(type); if (registeredService == null) return; - if (registeredService != service) throw new InvalidOperationException("This is not the service object that was registered under this type."); _services.Remove(type); Platform.Logger.Debug(LOG_TAG, "Unregistered object of type {0}.", type); - if (registeredService is IService) ((IService)registeredService).OnUnregister(); } @@ -67,10 +64,8 @@ namespace Blarg.GameFramework { if (type.IsValueType) throw new ArgumentException("ServiceContainer cannot be used with value types.", "type"); - - object service; - _services.TryGetValue(type, out service); - return service; + else + return _services.Get(type); } public void Dispose() diff --git a/Blarg.GameFramework/Support/DictionaryExtensions.cs b/Blarg.GameFramework/Support/DictionaryExtensions.cs new file mode 100644 index 0000000..b82dbdb --- /dev/null +++ b/Blarg.GameFramework/Support/DictionaryExtensions.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; + +namespace Blarg.GameFramework.Support +{ + public static class DictionaryExtensions + { + public static TValue Get(this IDictionary dict, TKey key) where TValue : class + { + TValue result; + dict.TryGetValue(key, out result); + return result; + } + } +} +