I'm having this issue and after googled and readed almost all the documentation about it and search for the same question here, I'm not able to solve it, I really need help.
So I've just made a short piece of code so any of you can reproduce easily:
using Microsoft.Practices.Unity.Configuration;
using Unity;
namespace ConsoleApp1
{
public class Dog { public Dog() { } }
public class Cat { public Cat() { } }
public interface IVet<T1, T2>{}
public interface IHospital<T> { }
public class Veterinarian : IVet<Dog, Cat> { public Veterinarian() { } }
public class VeterinaryHospital : IHospital<IVet<Dog, Cat>> { public VeterinaryHospital() { } }
class Program
{
static void Main(string[] args)
{
UnityContainer Container;
//New container
Container = new UnityContainer();
Container.AddExtension(new Diagnostic());
//Loading configuration
Container.LoadConfiguration();
var myVet = Container.Resolve<IVet<Dog, Cat>>(); //Ok
var myHospital = Container.Resolve<IHospital<IVet<Dog, Cat>>>(); //Throws resolve exception
}
}
}
And the app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration" />
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="DogEntity" type="ConsoleApp1.Dog, ConsoleApp1" />
<alias alias="CatEntity" type="ConsoleApp1.Cat, ConsoleApp1" />
<alias alias="IHospital" type="ConsoleApp1.IHospital`1, ConsoleApp1" />
<alias alias="IVet" type="ConsoleApp1.IVet`2, ConsoleApp1" />
<alias alias="VeterinaryHospital" type="ConsoleApp1.VeterinaryHospital, ConsoleApp1" />
<alias alias="Veterinarian" type="ConsoleApp1.Veterinarian, ConsoleApp1" />
<containers>
<container>
<register type="IVet[DogEntity,CatEntity]" mapTo="Veterinarian">
<lifetime type="ContainerControlledLifetimeManager"/>
</register>
<register type="IHospital[Veterinarian]" mapTo="VeterinaryHospital">
<lifetime type="ContainerControlledLifetimeManager"/>
</register>
<!-- This option doesn't work either -->
<!--<register type="IHospital[IVet[DogEntity,CatEntity]]" mapTo="VeterinaryHospital">
<lifetime type="ContainerControlledLifetimeManager"/>
</register>-->
</container>
</containers>
</unity>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>
So, the problem is that I'm not able to get my "Hospital" resolved, I'm getting always a
Unity.ResolutionFailedException: 'The current type, ConsoleApp1.IHospital`1[ConsoleApp1.IVet`2[ConsoleApp1.Dog,ConsoleApp1.Cat]], is an interface and cannot be constructed. Are you missing a type mapping?
Any suggestions please?
Thank you in advance!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…