I have the following factory:
public class MyFactory : IMyFactory
{
private readonly IEnumerable<IMyService> myServices
public MyFactory(IEnumerable<IMyService> myServices)
{
this.myServices = myServices;
}
}
I am registering my IEnumerable<IMyService>
like this:
container.Register<IMyFactory, MyFactory>();
container.RegisterAll<IMyService>(
from s in AppDomain.CurrentDomain.GetAssemblies()
from type in s.GetExportedTypes()
where !type.IsAbstract
where typeof(IMyService).IsAssignableFrom(type)
select type);
container.Verify();
Then I get the following results
// correctly resolves to count of my 4 implementations
// of IMyService
var myServices = container.GetAllInstances<IMyService>();
// incorrectly resolves IEnumerable<IMyService> to count
// of 0 IMyServices.
var myFactory = container.GetInstance<IMyFactory>();
Why is it that my factory cannot resolve the collection of services?
I created the following console application:
using System;
using System.Collections.Generic;
using System.Linq;
using SimpleInjector;
public interface IMyManager { }
public interface IMyFactory { }
public interface IMyService { }
public class MyManager : IMyManager
{
public MyManager(IMyFactory factory) { }
}
public class MyFactory : IMyFactory
{
public MyFactory(
IEnumerable<IMyService> services)
{
Console.WriteLine("MyFactory(Count: {0})",
services.Count());
}
}
public class Service1 : IMyService { }
public class Service2 : IMyService { }
public class Service3 : IMyService { }
public class Service4 : IMyService { }
class Program
{
static void Main(string[] args)
{
var container = new Container();
container.Register<IMyFactory, MyFactory>();
container.Register<IMyManager, MyManager>();
container.RegisterAll<IMyService>(
from nd in AppDomain.CurrentDomain.GetAssemblies()
from type in nd.GetExportedTypes()
where !type.IsAbstract
where typeof(IMyService).IsAssignableFrom(type)
select type);
var myManager = container.GetInstance<IMyManager>();
Console.WriteLine("IMyService count: " +
container.GetAllInstances<IMyService>().Count());
}
}
When I run it, it outputs the following:
MyFactory(Count: 4) IMyService count: 4