using System; using System.Collections.Generic; using TinyIoC; namespace NzbDrone.Common.Composition { public class Container : IContainer { private readonly TinyIoCContainer _container; public Container(TinyIoCContainer container) { _container = container; //_container.Options.AllowOverridingRegistrations = true; //_container.RegisterSingle(LogManager.GetCurrentClassLogger()); _container.Register(this); //container.RegisterWithContext(dependencyContext => LogManager.GetLogger(dependencyContext.ImplementationType.Name)); } public void Register() where TImplementation : class, TService where TService : class { _container.Register(); } public TinyIoCContainer TinyContainer { get { return _container; } } public void Register(T instance) where T : class { _container.Register(instance); } public T Resolve() where T : class { return _container.Resolve(); } public object Resolve(Type type) { return _container.Resolve(type); } public void Register(Type serviceType, Type implementationType) { _container.Register(serviceType, implementationType); } public void Register(Func factory) where TService : class { _container.Register((c, n) => factory(this)); } public void RegisterSingleton() where TImplementation : class, TService where TService : class { _container.Register().AsSingleton(); } public void RegisterSingleton() where T : class { _container.Register().AsSingleton(); } public void RegisterSingleton(Type service, Type implementation) { _container.Register(service, implementation).AsSingleton(); } public IEnumerable ResolveAll() where T : class { return _container.ResolveAll(); } public IEnumerable ResolveAll(Type type) { return _container.ResolveAll(type); } public void Register(Type registrationType, object instance) { _container.Register(registrationType, instance); } public void RegisterAll(Type registrationType, IEnumerable implementationList) { _container.RegisterMultiple(registrationType, implementationList); } public bool IsTypeRegistered(Type type) { return _container.CanResolve(type); } } }