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;
+ }
+ }
+}
+