2009-09-02 5 views

Répondre

2

vous aurez besoin de faire quelque chose comme ceci: -

StructureMapConfiguration 
    .ForRequestedType<IResourceA>() 
    .TheDefaultIsConcreteType<ResourceB>() 
    .CacheBy(InstanceScope.Singleton); 

cela dit StructureMap d'injecter ResourceB quand il y a une demande de ResourceA.

1

Structure Map

Vous pouvez configurer ou via programatically fichier de configuration.

exemple Programatical (il y a d'autres façons):

StructureMap.StructureMapConfiguration.ForRequestedType<ISomething>().TheDefaultIsConcreteType<ConcreteSomething>(); 

alors vous pouvez obtenir une instance de type configuré en utilisant ce type de code:

//The concrete type will be ConcreteSomething 

ISomething instance = ObjectFactory.GetInstance<ISomething>(); 

Vous pouvez le faire dans une config fichier:

<StructureMap MementoStyle="Attribute"> 
     <DefaultInstance PluginType="Blah.ISomething, Blah.SomethingDLL" PluggedType="Blah.Concrete.ConcreteSomething,Blah.ConcreteDLL"/> 
</StructureMap> 

et dans la principale méthode ou Global.asax vous pouvez définir cette configuration en disant:

StructureMap.ObjectFactory.Initialize(x => { x.PullConfigurationFromAppConfig = true; }); 

et de l'utiliser de la même façon que ci-dessus:

ISomething instance = ObjectFactory.GetInstance<ISomething>(); 

Si la classe de béton a un constructeur qui a besoin d'instances injectées dans, et vous avez ceux configurés, les types de béton seront obtenir injecté par le cadre.

Il existe des moyens de transmettre des paramètres aux constructeurs, en traitant des types Gereric, en créant des instances nommées qui sont configurées avec des valeurs de constructeur/propriété spécifiques. J'utilise ce cadre et l'aime beaucoup.

Questions connexes