Я ожидал, что следующее будет производить два отдельных экземпляра при использовании typed factory facility.Почему заводская фабрика Castle Windsor возвращает тот же экземпляр при создании с разными параметрами
using System;
using Castle.Facilities.TypedFactory;
using Castle.MicroKernel.Registration;
using Castle.Windsor;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
var container = new WindsorContainer();
container.AddFacility<TypedFactoryFacility>();
container.Register(Component
.For<IFactory>()
.AsFactory()
.LifestyleSingleton());
container.Register(Component
.For<IImplementation>()
.ImplementedBy<Implementation>()
.LifestylePerThread());
var factory = container.Resolve<IFactory>();
var implementation1 = factory.Create(1);
var implementation2 = factory.Create(2);
Console.WriteLine(implementation1 == implementation2);//Returns true!
Console.Read();
}
}
public interface IFactory
{
IImplementation Create(int dependency);
}
public interface IImplementation
{}
public class Implementation : IImplementation
{
private readonly int _dependency;
public Implementation(int dependency)
{
_dependency = dependency;
}
}
}
Я также пробовал с параметром в качестве ссылочного типа, который переопределяет .Equals()
и .GetHashCode()
вместо с междунар, но это не имеет никакого значения.
Я понимаю, что я могу использовать LifestyleTransient
для решения этой проблемы, но на самом деле хочу получить тот же экземпляр, если я передам тот же параметр.
Помогло найти местонахождение AsFactory. +1 для включения пространств имен в код. – w0051977