Feryt
Feryt

Reputation: 2302

.NET - create instance of each type that implements specific interface

I have interface IModule and several classes that implements it. In test i need to create instance of each type(class) implementing that interface. Is is possible(with StructureMap)?

Upvotes: 0

Views: 364

Answers (2)

Joshua Flanagan
Joshua Flanagan

Reputation: 8557

To do it using StructureMap:

var container = new Container(x => x.Scan(scan =>
{
    scan.TheCallingAssembly(); // there are options to scan other assemblies
    scan.AddAllTypesOf<IModule>();
}));

var allInstances = container.GetAllInstances<IModule>();

Upvotes: 3

742
742

Reputation: 3069

I'm not familiar with StructureMap. Anyway you need to have the list of types implementing IModule, then you create an object of each type in the list.

To get the list of types dynamically, it can be:

var types =
    from asm in AppDomain.CurrentDomain.GetAssemblies()
    from type in asm.GetType()
    where !type.IsAbstract
    where typeof(IModule).IsAssignableFrom(type)
    select type;

To instantiate the types:

IModule[] instances = (
    from type in types
    select (IModule)Activator.CreateInstance(type))
    .ToArray();

Upvotes: 3

Related Questions