2013-05-08 07:47:15 +02:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Collections.Generic;
|
2013-05-11 01:53:50 +02:00
|
|
|
|
using NzbDrone.Common.Composition;
|
2013-05-08 07:47:15 +02:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Common
|
|
|
|
|
{
|
|
|
|
|
public interface IServiceFactory
|
|
|
|
|
{
|
|
|
|
|
T Build<T>() where T : class;
|
|
|
|
|
IEnumerable<T> BuildAll<T>() where T : class;
|
|
|
|
|
object Build(Type contract);
|
2013-05-13 04:52:55 +02:00
|
|
|
|
IEnumerable<Type> GetImplementations(Type contract);
|
2013-05-08 07:47:15 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class ServiceFactory : IServiceFactory
|
|
|
|
|
{
|
2013-05-11 01:53:50 +02:00
|
|
|
|
private readonly IContainer _container;
|
2013-05-08 07:47:15 +02:00
|
|
|
|
|
2013-05-11 01:53:50 +02:00
|
|
|
|
public ServiceFactory(IContainer container)
|
2013-05-08 07:47:15 +02:00
|
|
|
|
{
|
|
|
|
|
_container = container;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public T Build<T>() where T : class
|
|
|
|
|
{
|
|
|
|
|
return _container.Resolve<T>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IEnumerable<T> BuildAll<T>() where T : class
|
|
|
|
|
{
|
2013-05-09 08:38:20 +02:00
|
|
|
|
return _container.ResolveAll<T>().GroupBy(c => c.GetType().FullName).Select(g => g.First());
|
2013-05-08 07:47:15 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public object Build(Type contract)
|
|
|
|
|
{
|
|
|
|
|
return _container.Resolve(contract);
|
|
|
|
|
}
|
2013-05-13 04:52:55 +02:00
|
|
|
|
|
|
|
|
|
public IEnumerable<Type> GetImplementations(Type contract)
|
|
|
|
|
{
|
|
|
|
|
return _container.GetImplementations(contract);
|
|
|
|
|
}
|
2013-05-08 07:47:15 +02:00
|
|
|
|
}
|
|
|
|
|
}
|