2008-12-16 7 views
2

Je souhaite enregistrer une instance spécifique d'un objet pour un type dans structuremap, comment puis-je faire cela?Comment faire pour que StructureMap renvoie une instance spécifique pour un type demandé

Par exemple,

Quand je fais:

var myObj = ObjectFactory.GetInstance(typeof(MyAbstractClass)); 

je voudrais pour retourner une classe concrète précédemment construit, que j'ai créé comme ceci:

var myClass = new MyConcreteClass("bla"); // MyConcreteClass : MyAbstractClass 

si

myObj == myClass 

Comment enregistrer myClass avec structuremap pour faciliter cela?

Merci

Andrew

Répondre

6

je crois que vous devez faire cela en vous initialisation

 ObjectFactory.Initialize(x => 
     { 
      x.ForRequestedType<MyAbstractClass>().TheDefault.IsThis(myClass); 
     }); 

Où myClass est l'instance de l'objet que vous souhaitez revenir.

+1

Im obtenir: Type de MyConcreteClass instance ne peut pas être branché sur le type MyAbstractClass. Une idée? –

+0

Avez-vous eu ce travail? Je viens de regarder en arrière et j'ai remarqué votre réponse. Je n'ai eu aucun problème en le faisant de cette façon dans notre application. Avez-vous une erreur de compilation ou une erreur d'initialisation? Vous pouvez publier le code qui tente d'obtenir l'instance. – Jab

4

Vous pouvez injecter un exemple concret que la valeur par défaut par

ObjectFactory.Inject(typeof(MyAbstractClass), myClass); 
+0

Cela a bien fonctionné pour moi. J'ai quelques exemples d'une ISessionFactory que j'ai mis en place. Chacun a un nom parce que chacun pointe vers une base de données différente. Après le ObjectFactory.Initialize() initial, puis ajoutez votre code pour indiquer à StructureMap que mon IWorkorderRepository doit pointer vers la base de données correcte: ObjectFactory.Inject (typeof (IWorkorderRepository), nouveau WorkorderRepository (ObjectFactory.GetNamedInstance (Resources.CityworksDatasource))); – Dylan

1

En StructureMap 3 méthodes ont changé et ce code fonctionne maintenant:

var emailService = new EmailService(ConfigurationManager.AppSettings[mykey]); 

ObjectFactory.Initialize(x => 
{     
    x.For<IEmailService>().Use(emailService); 
}); 
Questions connexes