better way of handling types
This commit is contained in:
parent
cbec3ddd90
commit
e141ddae9b
|
@ -16,13 +16,11 @@ namespace Blarg.GameFramework
|
||||||
Framework.Logger.Debug(LOG_TAG, "Ready for use.");
|
Framework.Logger.Debug(LOG_TAG, "Ready for use.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Register(object service)
|
public void Register<T>(T service) where T : class
|
||||||
{
|
{
|
||||||
if (service == null)
|
if (service == null)
|
||||||
throw new ArgumentNullException("service");
|
throw new ArgumentNullException("service");
|
||||||
var type = service.GetType();
|
var type = typeof(T);
|
||||||
if (type.IsValueType)
|
|
||||||
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.");
|
||||||
|
|
||||||
|
@ -33,19 +31,13 @@ namespace Blarg.GameFramework
|
||||||
Framework.Logger.Debug(LOG_TAG, "Registered object of type {0}.", type);
|
Framework.Logger.Debug(LOG_TAG, "Registered object of type {0}.", type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Unregister(object service)
|
public void Unregister<T>() where T : class
|
||||||
{
|
{
|
||||||
if (service == null)
|
var type = typeof(T);
|
||||||
throw new ArgumentNullException("service");
|
|
||||||
var type = service.GetType();
|
|
||||||
if (type.IsValueType)
|
|
||||||
throw new ArgumentException("ServiceContainer cannot be used with value types.", "service");
|
|
||||||
|
|
||||||
var registeredService = _services.Get(type);
|
var registeredService = _services.Get(type);
|
||||||
if (registeredService == null)
|
if (registeredService == null)
|
||||||
return;
|
return;
|
||||||
if (registeredService != service)
|
|
||||||
throw new InvalidOperationException("This is not the service object that was registered under this type.");
|
|
||||||
|
|
||||||
_services.Remove(type);
|
_services.Remove(type);
|
||||||
Framework.Logger.Debug(LOG_TAG, "Unregistered object of type {0}.", type);
|
Framework.Logger.Debug(LOG_TAG, "Unregistered object of type {0}.", type);
|
||||||
|
|
Reference in a new issue