J'ai un problème .... De peur que dire que j'ai une classe comme celle-ci:StructureMap type de résolution avec des paramètres
public class A: InterfaceA
{
private FileInfo _fileInfo = null;
public A(FileInfo fileInfo)
{
this._fileInfo = fileInfo;
}
...
}
et un autre:
public class B: InterfaceB
{
private A _classA = null;
public B(A classA)
{
this._classA = classA;
}
public void Do()
{
FileInfo fi = new FileInfo(...);
_classA.DoSomething();
}
}
Maintenant, j'ai installé StructureMap enregistre comme ceci:
For<InterfaceA>().Use<A>();
For<InterfaceB>().Use<B>();
et quand j'exécute B.Do() structuremap va lancer une erreur car il n'y a pas d'entrée de registre pour le paramètre FileInfo. Le paramètre de classe A (FileInfo) est construit dans la classe B; Je sais que je peux faire: ObjectFactor.GetInstance() et passer les paramètres, mais je veux injection de dépendance pas fournisseur de services. Et je le veux quand je fais ObjectFactory.GetInstance(), pour construire un graphe d'objet entier.
Comment faire?
Oui, mais où mettre: Pour .Utiliser () .Ctor () .Is (monFichier); Je ne peux pas le mettre dans mes registres parce que le FileInfo n'est pas connu sur l'instanciation? –
Luka
Si le nom de fichier n'est pas connu avant l'exécution de la méthode Do, vous devez soit opter pour une approche en usine, soit envisager de passer le fichier à la méthode. – PHeiberg
Édité ma réponse pour inclure une approche d'usine. – PHeiberg