add dictionary extension methods

This commit is contained in:
Gered 2013-08-22 18:46:12 -04:00
parent 166c735640
commit aac2663b77
3 changed files with 21 additions and 9 deletions

View file

@ -159,6 +159,7 @@
<Compile Include="Graphics\ScreenEffects\FlashEffect.cs" /> <Compile Include="Graphics\ScreenEffects\FlashEffect.cs" />
<Compile Include="IService.cs" /> <Compile Include="IService.cs" />
<Compile Include="ServiceContainer.cs" /> <Compile Include="ServiceContainer.cs" />
<Compile Include="Support\DictionaryExtensions.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
<ItemGroup> <ItemGroup>

View file

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Blarg.GameFramework.Support;
namespace Blarg.GameFramework namespace Blarg.GameFramework
{ {
@ -22,7 +23,6 @@ namespace Blarg.GameFramework
var type = service.GetType(); var type = service.GetType();
if (type.IsValueType) if (type.IsValueType)
throw new ArgumentException("ServiceContainer cannot be used with value types.", "service"); throw new ArgumentException("ServiceContainer cannot be used with value types.", "service");
if (_services.ContainsKey(type)) if (_services.ContainsKey(type))
throw new InvalidOperationException("Service object of this type has already been registered."); throw new InvalidOperationException("Service object of this type has already been registered.");
@ -41,18 +41,15 @@ namespace Blarg.GameFramework
if (type.IsValueType) if (type.IsValueType)
throw new ArgumentException("ServiceContainer cannot be used with value types.", "service"); throw new ArgumentException("ServiceContainer cannot be used with value types.", "service");
object registeredService; var registeredService = _services.Get(type);
_services.TryGetValue(type, out registeredService);
if (registeredService == null) if (registeredService == null)
return; return;
if (registeredService != service) if (registeredService != service)
throw new InvalidOperationException("This is not the service object that was registered under this type."); throw new InvalidOperationException("This is not the service object that was registered under this type.");
_services.Remove(type); _services.Remove(type);
Platform.Logger.Debug(LOG_TAG, "Unregistered object of type {0}.", type); Platform.Logger.Debug(LOG_TAG, "Unregistered object of type {0}.", type);
if (registeredService is IService) if (registeredService is IService)
((IService)registeredService).OnUnregister(); ((IService)registeredService).OnUnregister();
} }
@ -67,10 +64,8 @@ namespace Blarg.GameFramework
{ {
if (type.IsValueType) if (type.IsValueType)
throw new ArgumentException("ServiceContainer cannot be used with value types.", "type"); throw new ArgumentException("ServiceContainer cannot be used with value types.", "type");
else
object service; return _services.Get(type);
_services.TryGetValue(type, out service);
return service;
} }
public void Dispose() public void Dispose()

View file

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
namespace Blarg.GameFramework.Support
{
public static class DictionaryExtensions
{
public static TValue Get<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key) where TValue : class
{
TValue result;
dict.TryGetValue(key, out result);
return result;
}
}
}