L'Unité De Conteneur Résoudre
Je viens de commencer avec l'Unité de Conteneur et mon inscription ressemble à ceci:
static void UnityRegister()
{
_container = new UnityContainer();
_container.RegisterType<IBook, Book>();
_container.RegisterType<IBookRepository, BookRepository>("Book");
_container.RegisterType<IBookService, BookService>();
_container.RegisterType<IBookRepository, DatabaseRepository>("Database");
}
Maintenant quand j'essaye de résoudre ce faire:
var service = _container.Resolve<IBookService>("Database");
J'obtiens l'erreur ci-dessous:
Résolution de la dépendance à l'échec, type = "UnityConsoleEx.IBookService", nom = "Base de données".
Exception s'est produite lors: lors de la résolution.
Exception: exception InvalidOperationException - Le type de courant, UnityConsoleEx.IBookService, est une interface ne peut pas être construit. Êtes-vous manque un type de la cartographie?
At the time of the exception, the container was:
Resolving UnityConsoleEx.IBookService,Database
Quelqu'un peut-il point de ce que je fais de mal?
OriginalL'auteur Farukh | 2015-09-08
Vous devez vous connecter pour publier un commentaire.
Le principal problème est que vous n'êtes pas à l'aide d'une instance nommée de votre
BookService
.Mais vous tentez de résoudre une instance nommée.
Vous devez résoudre sans nom pour obtenir cette instance.
Mais il n'est pas clair à partir de votre exemple, pourquoi vous utilisez des instances nommées en premier lieu. Si vous publiez les constructeurs de vos services, il sera plus évident de savoir comment faire de votre configuration de travail.
OriginalL'auteur NightOwl888
J'ai tout compris, j'ai besoin de créer une instance nommée pour le service et d'injecter du constructeur, en tant que tel:
Et de le résoudre comme ci-dessous:
OriginalL'auteur Farukh
Je pense que, vous essayez de résoudre
BookService
devrait contientDatabaseRepository
en tant que paramètre. Vous ne pouvez pas le faire à votre façon.Vous pouvez le faire comme ceci:
Peut-être, le meilleur moyen est de vous inscrire référentiel une fois, conditionaly:
Et maintenant, résoudre de service.
Aussi, vous pouvez configurer votre conteneur comme ceci:
Cela indiquera le conteneur pour résoudre
IBookService
à l'aide de constructeur avec un seulIBookRepository
paramètre, et de résoudre lesIBookRepository
avec le nom deDatabase
.OriginalL'auteur Backs