Autofac diferentes resoluciones servicio basado en TypedParameter
-
26-09-2019 - |
Pregunta
¿Hay alguna forma de conseguir autofac para resolver el servicio que tiene una aplicación concreta con el constructor que coincide con un parámetro dado más específicamente.
Con esto quiero decir que coincida con un constructor para un tipo de niño en lugar de hacer coincidir el constructor para el tipo de base.
Por ejemplo me gustaría hacer la siguiente pase de prueba
[TestFixture]
public class AutofacResolvTestFixture
{
[Test]
public void test()
{
var cb = new ContainerBuilder();
cb.RegisterType<Child1>();
cb.RegisterType<Child2>();
cb.RegisterType<ServiceImpl1>().As<IService>();
cb.RegisterType<ServiceImpl2>().As<IService>();
var container = cb.Build();
var c1=container.Resolve<Child1>();
var c2=container.Resolve<Child2>();
var s1 = container.Resolve<IService>(new TypedParameter(c1.GetType(), c1));
var s2 = container.Resolve<IService>(new TypedParameter(c2.GetType(), c2));
Assert.That(s1, Is.InstanceOf<ServiceImpl1>());
Assert.That(s2, Is.InstanceOf<ServiceImpl2>());
Assert.That(s1.ConstructorParam, Is.SameAs(c1));
Assert.That(s2.ConstructorParam, Is.SameAs(c2));
}
}
public class baseClass {}
public class Child1 : baseClass{}
public class Child2 : baseClass{}
public interface IService
{
baseClass ConstructorParam { get; }
}
public class ServiceImpl1 : IService
{
private baseClass _b;
public ServiceImpl1(baseClass b)
{
_b = b;
}
public baseClass ConstructorParam
{
get
{
return _b;
}
}
}
public class ServiceImpl2 : IService
{
private baseClass _b;
public ServiceImpl2(Child2 b)
{
_b = b;
}
public baseClass ConstructorParam
{
get
{
return _b;
}
}
}
Mi objetivo es hacer IService, IEditor y ser capaz de resolver el IEditor para un tipo pasándolo a autofac. Quiero hacer esto para que pueda "anular" el editor para un tipo simplemente heredar IEditor y utilizando el constructor de tipo apropiado que es para que IEditor.
Gracias.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow