2010-08-26 3 views
1

En regardant un post de Karl Seguin où il montre show design pour la testabilité conduit à un meilleur design, dans ce cas, composition over inheritance.Composition avec StructureMap

Dans l'exemple, son CachedEmployeeLookup a une dépendance à l'égard d'un EmployeeLookup, tous deux mettre en œuvre la même interface, IEmployeeLookup

Comment vous pouvez configurer cela dans StructureMap de sorte que la classe par défaut utilisé par le programme est CachedEmployeeLookup alors que CachedEmployeeLookup obtient un EmployeeLookup lui a été injecté?

Répondre

1

Je pense que quelque chose comme ça fonctionnerait:

For<IEmployeeLookup>().Add<EmployeeLookup>(). 
    Named("employeeLookup"); 

For<IEmployeeLookup>().Use<CachedEmployeeLookup>() 
    .Ctor<IEmployeeLookup>().Is(
    d => d.TheInstanceNamed("employeeLookup")); 
+0

Oops! Avait le mauvais objet par défaut. Changé par défaut pour être correct. – PHeiberg

1

Vous pouvez utiliser EnrichWith lors de la configuration des applications de type, par exemple

ObjectFactory.Initialize(i => 
{ 
    i.For<IDecorator>().Use<Inner>().EnrichWith(d => new Decorator(d)); 
}); 

This page a quelques exemples d'interception dans StructureMap