add dictionary extension methods
This commit is contained in:
parent
166c735640
commit
aac2663b77
|
@ -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>
|
||||||
|
|
|
@ -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()
|
||||||
|
|
16
Blarg.GameFramework/Support/DictionaryExtensions.cs
Normal file
16
Blarg.GameFramework/Support/DictionaryExtensions.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in a new issue