Je dois souligner que je suis relativement nouveau à Castle, donc je ne sais pas vraiment ce que je fais avec. L'essentiel, c'est que j'essaie de faire un cycle de vie personnalisé d'un objet avec Castle Windsor. Je ne suis pas tout à fait sûr comment cela devrait être fait, cependant, l'approximation la plus proche que je peux trouver à la façon dont cela devrait fonctionner, j'ai détaillé ci-dessous.Castle dépendance injection Lifestyle
Je veux un singleton, mais je ne peux pas publier ce type et assigner une nouvelle instance à.
-à-dire,
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
Je veux être en mesure de libérer l'instance, mais Windsors définition d'un Singleton est trop rigide pour mes besoins.
container.Release(item); //I need to release the current instance, this doesn't work.
ou
container.Kernal.ReleaseComponent(item); //Don't work either.
Alors, quand je mets un nouvel élément que le courant ne revient pas à l'instance 1.
item = container.Resolve<IMyObject>(item); //sets the currect instance of MyObject
Print(item);
>>instance 2
J'ai besoin de stocker une variable qui a une portée personnalisée, ni Singleton ni Transient vont couper la moutarde pour moi. Je dois pouvoir définir la portée, quand la variable stockée entre et sort de la portée. Plus précisément, si j'ai une autre classe B qui dépend de A, alors si j'obtiens A de l'extérieur du conteneur, comment définir A dans le conteneur? C'est bien dans un scénario singleton, mais je ne peux pas le définir pour un scénario transitoire, cependant, avec Singleton, une fois qu'il est défini, je ne peux pas le libérer, ce qui est nécessaire.
Comment est-ce que je fais ceci?
Je veux le faire en code plutôt qu'en XML, car j'inscris les classes dynamiquement.
Vous pouvez créer un style de vie personnalisé en fonction de vos besoins. Voir l'exemple ici: http://stackoverflow.com/a/1366597/1275399 –