Hemos comenzado a usar la versión 2 de Ninject como nuestro contenedor IoC junto con la extensión para resolver mediante convenciones de nombres. También estamos usando log4net para nuestro registro.Inicio de aplicación de dependencias resueltas de ninject Log-in
Lo que me gustaría es que Ninject registre todas las dependencias que ha encontrado y lo que las resolverá, preferiblemente en el inicio de la aplicación.
He encontrado la extensión de registro, pero no puedo encontrar documentación o ejemplos sobre cómo usarla para obtener esto.
Editar:
Desde que se solicita aquí es la clase que registra los enlaces predeterminados en el arranque, usando log4net
DefaultBindingGeneratorWithLogging clase pública: IBindingGenerator { sólo lectura privada iKernel kernel;
/// <summary>
/// Initializes a new instance of the <see cref="DefaultBindingGeneratorWithLogging"/> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
public DefaultBindingGeneratorWithLogging(IKernel kernel)
{
this.kernel = kernel;
}
/// <summary>
/// Creates the bindings for a type.
/// </summary>
/// <param name="type">The type for which the bindings are created.</param>
/// <param name="bindingRoot">The binding root that is used to create the bindings.</param>
/// <returns>
/// The syntaxes for the created bindings to configure more options.
/// </returns>
public IEnumerable<IBindingWhenInNamedWithOrOnSyntax<object>> CreateBindings(Type type, IBindingRoot bindingRoot)
{
if (type.IsInterface || type.IsAbstract)
{
yield break;
}
Type interfaceForType = type.GetInterface("I" + type.Name, false);
if (interfaceForType == null)
{
yield break;
}
var log = kernel.Get<ILog>();
if (!(kernel.GetBindings(interfaceForType).Any()))
{
bindingRoot.Bind(interfaceForType).To(type).InTransientScope();
if (log.IsInfoEnabled && !String.IsNullOrWhiteSpace(interfaceForType.FullName))
{
log.InfoFormat("Mapping {0} -> {1}", type.FullName, interfaceForType.FullName);
}
}
else
{
log.InfoFormat("Didn't map {0} -> {1} mapping already exists", type.FullName, interfaceForType.FullName);
}
}
}
Nota: Esto registra los enlaces cuando se activan/desactivan. Un poco diferente de iniciar sesión en el inicio, pero ¿puede ser útil? – rcravens
Definitivamente útil. Me gustaría encontrar un código para registrar los enlaces basados en la convención creando mi propia clase para registrarlos tal como se encontraron, pero también me gustaría registrar la activación/desactivación, así que esto es genial. – Mant101
@ Mant101, si pudiera compartir el código para el registro de enlaces basado en convenciones para que sea completo y sea útil para esta pregunta. – user3141326