Я должен отметить, что я относительно новичок в Касле, так что пока не знаю, что я с ним делаю.Суть в том, что я пытаюсь создать собственный жизненный цикл объекта с помощью Castle Windsor.Я не совсем уверен, как это должно быть сделано, однако самое близкое приближение, которое я могу найти к тому, как это должно работать, я подробно описал ниже.
Я хочу синглтон, но я не могу выпустить этот тип иназначить новый экземпляр.
т.е.
public interface IMyObject { string text; }
public class MyObject() : IMyObject {
public string text;
}
var container = new WindsorContainer();
container.Register(Component.For<IMyObject>().ImplementedBy<MyObject>().LifeStyle.Singleton);
MyObject item = SomeMethodGetInstance(); //Defines scope for instance 1
item = container.Resolve<IMyObject>(item);
Print(item);
>>instance 1
....
item = container.Resolve<IMyObject>(); //gets instance 1
Print(item);
>>instance 1
....
item = SomeMethodGetInstance() //New scope defined, now using instance 2
Я хочу иметь возможность выпустить экземпляр, но определение Синглтона Виндзорсом слишком жестко для моих нужд.
container.Release(item); //I need to release the current instance, this doesn't work.
или
container.Kernal.ReleaseComponent(item); //Don't work either.
Итак, когда я устанавливаю новый элемент в качестве текущего, он не возвращается к экземпляру 1.
item = container.Resolve<IMyObject>(item); //sets the currect instance of MyObject
Print(item);
>>instance 2
Мне нужно сохранить переменнуюу которого есть пользовательская область, ни Синглтон, ни Переходный процесс не собираются сокращать горчицу для меня.Мне нужно уметь определять область видимости, когда сохраненная переменная входит и выходит из области видимости.
Более конкретно, если у меня есть другой класс B, который зависит от A, то если я получу A извне контейнера, как мне установить A в контейнере?Это нормально в одноэтапном сценарии, но я не могу установить его для переходного сценария, однако, с помощью Singleton, после его установки, я не могу его разблокировать, что необходимо.
Как мне это сделатьэто пожалуйста?
Я хочу сделать это в коде, а не в XML, так как я регистрирую классы динамически.