He registrado una clase MembershipProvider personalizada en mi archivo Web.Config. Estoy usando Inversion of Control usando Castle Windsor y he registrado mi clase MembershipProvider personalizada como transitoria (porque también está usando un servicio transitorio).¿Cómo controlo la creación/duración de la instancia de MembershipProvider?
Esto significa que quiero que se vuelva a crear la instancia del proveedor de membresía en cada solicitud web. Actualmente, se crea solo una vez por cada dominio de aplicación, de modo que cuando intenta acceder al servicio del que depende, esa instancia de servicio se reutiliza mientras no se supone que lo haga.
Ahora tengo que encontrar la manera de que Windsor controle la vida útil de mi MembershipProvider personalizado, pero no sé cómo. Esperaba una fábrica sentada en algún lugar de .NET Framework, lo que me permitió anular la creación de la instancia y volver a enrutarla a Windsor, pero no encuentro nada igual.
Por cierto, estoy usando .NET 4.0.
ACTUALIZACIÓN: He aquí algunos de mi código para que pueda ver lo que estoy haciendo exactamente:
Web.Config:
<membership defaultProvider="MyMembershipProvider" >
<providers>
<clear/>
<add name="ApplicationMembershipProvider"
type="MyNamespace.MyMembershipProvider, MyAssembly"/>
</providers>
</membership>
proveedor de suscripciones
public class MyMembershipProvider : MembershipProvider
{
private IMyService myService;
public MyMembershipProvider() : base()
{
// We should use constructor injection here but since we cannot control
// the construction of this class, we're forced to create the dependency
// ourselves.
}
public override bool ValidateUser(string username, string password)
{
if (myService == null)
{
// This scope is only reached once within the browser session,
// ASP.NET keeps the instance of MyMembershipProvider in memory
// so the myService field keeps its value across web requests.
// This results in Castle Windsor (which I have configured the service
// locator to use) not being able to control the lifetime of
// the MyService instance. So, the inability of Windsor to control
// the lifetime of MembershipProvider instances, inhibits the lifetime
// management of MyService instances as well.
myService = ServiceLocator.Current.GetInstance<IMyService>();
}
return myService.ValidateUser(username, password);
}
}
¿Puede profundizar en "controlar la vida útil"? ¿Qué (concretamente) quieres lograr? –
@Mauricio: He actualizado mi pregunta en consecuencia (inserto un párrafo después del primero). –
No estoy seguro de entender ... si ha registrado el componente como transitorio * se * volverá a crear cada vez, por definición ... ¿puede publicar su código de registro? –