Podría parecer una pregunta estúpida, porque en mi código que todo funciona, pero he registrado un producto único de esta manera con mi contenedor Unidad _ambientContainer
:UnityContainer.Resolve o ServiceLocator.GetInstance?
_ambientContainer.RegisterType<Application.StateContext>(new ContainerControlledLifetimeManager());
Con el fin de evitar que usar mi local de campo, uso :
get {
return ServiceLocator.Current.GetInstance<Application.StateContext>();
}
dentro de mi propiedad para obtener una instancia de mi objeto. De esta forma siempre obtengo la misma instancia (Application.StateContext
sigue siendo un singleton) o ¿crea GetInstance
una nueva?
¿Es mejor utilizar el campo local _ambientContainer
en su lugar?
get {
return _ambientContainer.Resolve<Application.StateContext>();
}
Gracias.
¿Tiene alguna sugerencia de una alternativa? (específico para el código de ejemplo en la pregunta?) – Adam
@Adam ¿Una alternativa a qué código? ¿El getter? O el registro de 'Application.StateContext'? El autor no dijo qué tipo de aplicación usa (asp.net/mcv, winforms, wpf, console, wcf ...) por lo que no puedo decir que pusiera el código de registro. Cada tipo de aplicación tiene una [raíz de composición] diferente (http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx). En cuanto a la llamada al localizador de servicios: haga que 'StateContext' sea un parámetro de ctor de aquellas clases que lo necesiten. Eso hace que la dependencia sea explícita e intercambiable (por ejemplo, para las pruebas). –
Cualquier patrón es un patrón anti si lo usa de forma incorrecta. TODAS las bibliotecas DI usan la ubicación del servicio debajo de las cubiertas, de lo contrario no funcionan. ¡No creas todo lo que lees en internet! – JBeckton