Comment injecter de la propriété de dépendance à l'aide du Cio à l'Unité
J'ai les classes suivantes:
public interface IServiceA
{
string MethodA1();
}
public interface IServiceB
{
string MethodB1();
}
public class ServiceA : IServiceA
{
public IServiceB serviceB;
public string MethodA1()
{
return "MethodA1() " +serviceB.MethodB1();
}
}
public class ServiceB : IServiceB
{
public string MethodB1()
{
return "MethodB1() ";
}
}
- Je utiliser l'Unité pour les Cio, mon inscription ressemble à ceci:
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>();
Quand j'résoudre un ServiceA
exemple, serviceB
sera null
.
Comment puis-je résoudre ce problème?
OriginalL'auteur Jin Ho | 2012-04-22
Vous devez vous connecter pour publier un commentaire.
Vous avez au moins deux options ici:
Vous pouvez/devez utiliser le constructeur de l'injection, pour que vous avez besoin d'un constructeur:
Ou de l'Unité prend en charge la propriété de l'injection, pour que vous avez besoin d'une propriété et de la
DependencyAttribute
:Le site MSDN Quelle Est L'Unité? est un bon point de départ pour l'Unité.
Et si la classe dispose de plusieurs dépendances, qui ne sont pas tous nécessaires dans certains appels? Seront-ils tous être instancié? Ou vont-ils seulement être instancié lors de l'accès, comme ci-dessus: serviceB.méthode() ? @Carlos
toutes vos dépendances seront instaurées et injecter lors de la ServiceA est créé même si vous ne les utilisez pas dans tous de votre méthode. L'unité ne prend pas en charge paresseux instanciation de la boîte, mais il peut être ajouté que l'extension: pwlodek.blogspot.hu/2010/05/...
J'ai essayé le suivant:
container.RegisterType<ICustomerDA, CustomerDA>();
container.RegisterType<ISampleBF, SampleBF>(new InjectionProperty("CDA", container.Resolve<ICustomerDA>()));
j'ai marqué la propriété de l'ADC résidant dans SampleBF comme la Dépendance. Ma question, ça va fonctionner si j'instancie la SampleBF manuellement? Parce que c'est la façon dont je le fais et j'ai toujours "la référence d'Objet n'est pas définie à une instance" lorsque vous essayez d'aaccess la propriété de l'ADC.Ok, je dois résoudre l'appel de la classe par l'unité (dans mon cas ISampleBF), puis il travaille.
OriginalL'auteur nemesv