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="IService.cs" />
|
||||
<Compile Include="ServiceContainer.cs" />
|
||||
<Compile Include="Support\DictionaryExtensions.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||
<ItemGroup>
|
||||
|
|
|
@ -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()
|
||||
|
|
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