I just starting with Unity Container and my registration looks like this:
static void UnityRegister()
{
_container = new UnityContainer();
_container.RegisterType<IBook, Book>();
_container.RegisterType<IBookRepository, BookRepository>("Book");
_container.RegisterType<IBookService, BookService>();
_container.RegisterType<IBookRepository, DatabaseRepository>("Database");
}
Now when I try to resolve doing this:
var service = _container.Resolve<IBookService>("Database");
I get error below:
Resolution of the dependency failed, type = "UnityConsoleEx.IBookService", name = "Database". Exception occurred while: while resolving. Exception is: InvalidOperationException - The current type, UnityConsoleEx.IBookService, is an interface and cannot be constructed. Are you missing a type mapping?
At the time of the exception, the container was:
Resolving UnityConsoleEx.IBookService,Database
Can anyone point what I am doing wrong?
I think, you try to resolve
BookService
with should containsDatabaseRepository
as a parameter. You can't do it in your way.You can do it like this:
Maybe, better way is register repository once, conditionaly:
And now, resolve service. Also, you can configure you container like this:
This will tell the container to resolve
IBookService
using constructor with singleIBookRepository
parameter, and resolveIBookRepository
with name ofDatabase
.The main issue is that you are not using a named instance for your
BookService
.But you are trying to resolve with a named instance.
You need to resolve without a name to get that instance.
But it is unclear from your example why you are using named instances in the first place. If you post the constructors of your services, it will be more clear how to make your configuration work.
I figured it out, I needed create named instance for the service and inject constructor, as such:
And resolve it as below: