|
|
#region License
|
|
|
/* FNA - XNA4 Reimplementation for Desktop Platforms
|
|
|
* Copyright 2009-2020 Ethan Lee and the MonoGame Team
|
|
|
*
|
|
|
* Released under the Microsoft Public License.
|
|
|
* See LICENSE for details.
|
|
|
*/
|
|
|
|
|
|
/* Derived from code by the Mono.Xna Team (Copyright 2006).
|
|
|
* Released under the MIT License. See monoxna.LICENSE for details.
|
|
|
*/
|
|
|
#endregion
|
|
|
|
|
|
#region Using Statements
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
#endregion
|
|
|
|
|
|
namespace Microsoft.Xna.Framework
|
|
|
{
|
|
|
public class GameServiceContainer : IServiceProvider
|
|
|
{
|
|
|
#region Private Fields
|
|
|
|
|
|
Dictionary<Type, object> services;
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Public Constructors
|
|
|
|
|
|
public GameServiceContainer()
|
|
|
{
|
|
|
services = new Dictionary<Type, object>();
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Public Methods
|
|
|
|
|
|
public void AddService(Type type, object provider)
|
|
|
{
|
|
|
if (type == null)
|
|
|
{
|
|
|
throw new ArgumentNullException("type");
|
|
|
}
|
|
|
if (provider == null)
|
|
|
{
|
|
|
throw new ArgumentNullException("provider");
|
|
|
}
|
|
|
if (!type.IsAssignableFrom(provider.GetType()))
|
|
|
{
|
|
|
throw new ArgumentException(
|
|
|
"The provider does not match the specified service type!"
|
|
|
);
|
|
|
}
|
|
|
|
|
|
services.Add(type, provider);
|
|
|
}
|
|
|
|
|
|
public object GetService(Type type)
|
|
|
{
|
|
|
if (type == null)
|
|
|
{
|
|
|
throw new ArgumentNullException("type");
|
|
|
}
|
|
|
|
|
|
object service;
|
|
|
if (services.TryGetValue(type, out service))
|
|
|
{
|
|
|
return service;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
public void RemoveService(Type type)
|
|
|
{
|
|
|
if (type == null)
|
|
|
{
|
|
|
throw new ArgumentNullException("type");
|
|
|
}
|
|
|
|
|
|
services.Remove(type);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
}
|
|
|
}
|
|
|
|