mirror of
https://github.com/digital-jellyfish/Virtu.git
synced 2024-06-11 10:29:31 +00:00
0182641281
Added save state support to all machine components. Switched from xml serialization to binary serialization. Refactored audio service for performance. Bumped machine version to 0.9.0 for next release. Miscellaneous cosmetic or minor changes.
52 lines
1.9 KiB
C#
52 lines
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.Globalization;
|
|
using Jellyfish.Virtu.Properties;
|
|
|
|
namespace Jellyfish.Virtu.Services
|
|
{
|
|
public sealed class MachineServices : IServiceProvider
|
|
{
|
|
public void AddService(Type serviceType, MachineService serviceProvider)
|
|
{
|
|
if (serviceType == null)
|
|
{
|
|
throw new ArgumentNullException("serviceType");
|
|
}
|
|
if (_serviceProviders.ContainsKey(serviceType))
|
|
{
|
|
throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, Strings.ServiceAlreadyPresent, serviceType.FullName), "serviceType");
|
|
}
|
|
if (serviceProvider == null)
|
|
{
|
|
throw new ArgumentNullException("serviceProvider");
|
|
}
|
|
if (!serviceType.IsAssignableFrom(serviceProvider.GetType()))
|
|
{
|
|
throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, Strings.ServiceMustBeAssignable, serviceType.FullName, serviceProvider.GetType().FullName));
|
|
}
|
|
|
|
_serviceProviders.Add(serviceType, serviceProvider);
|
|
}
|
|
|
|
[SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter")]
|
|
public T GetService<T>()
|
|
{
|
|
return (T)((IServiceProvider)this).GetService(typeof(T));
|
|
}
|
|
|
|
public void RemoveService(Type serviceType)
|
|
{
|
|
_serviceProviders.Remove(serviceType);
|
|
}
|
|
|
|
object IServiceProvider.GetService(Type serviceType)
|
|
{
|
|
return _serviceProviders.ContainsKey(serviceType) ? _serviceProviders[serviceType] : null;
|
|
}
|
|
|
|
private Dictionary<Type, MachineService> _serviceProviders = new Dictionary<Type, MachineService>();
|
|
}
|
|
}
|