Моя проблема в том, что я хочу использовать Func <> завод для разрешения зависимости. И если я использую ContainerBuilder Update() (мне это нужно для издевательства над некоторыми сервисами в тестах интеграции), эта фабрика по-прежнему разрешает устаревшие экземпляры.Autofac: невозможно разрешить зависимость с использованием фабрики после ContainerBuilder.Update()
Я создал простой сценарий, чтобы воспроизвести проблему:
class Program
{
static void Main(string[] args)
{
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterType<Test>().As<ITest>();
containerBuilder.RegisterType<Test1Factory>().As<ITestFactory>();
containerBuilder.RegisterType<TestConsumer>().AsSelf();
var container = containerBuilder.Build();
var tc1 = container.Resolve<TestConsumer>();
var cbupdater = new ContainerBuilder();
cbupdater.RegisterType<Test2>().As<ITest>();
cbupdater.RegisterType<Test2Factory>().As<ITestFactory>();
cbupdater.Update(container);
var tc2 = container.Resolve<TestConsumer>();
Console.ReadLine();
}
}
public interface ITest
{
int Id { get; set; }
}
public class Test : ITest
{
public Test()
{
Id = 1;
}
public int Id { get; set; }
}
public class Test2 : ITest
{
public Test2()
{
Id = 2;
}
public int Id { get; set; }
}
public interface ITestFactory
{
ITest Create();
}
public class Test1Factory : ITestFactory
{
public ITest Create()
{
return new Test();
}
}
public class Test2Factory : ITestFactory
{
public ITest Create()
{
return new Test2();
}
}
public class TestConsumer
{
public TestConsumer(Func<ITest> testFactory, ITest test, ITestFactory customFactory)
{
Console.WriteLine("factory: " + testFactory().Id);
Console.WriteLine("direct: " + test.Id);
Console.WriteLine("MyCustomFactory: " + customFactory.Create().Id);
Console.WriteLine("*************");
Console.WriteLine();
}
}
Выход есть:
завод: 1 прямой: 1 MyCustomFactory: 1
завод: 1 прямой : 2 MyCustomFactory: 2
Уведомление: Завод "1" в обоих случаях.
Я что-то упускаю или мне нужно создать свою фабрику кузсов в этом сценарии?
P.S.
Autofac 3.5.2 или 4.0 бета 8-157 .net 4.5.1