Rozpoczęliśmy używanie programu Ninject w wersji 2 jako naszego kontenera IoC wraz z rozszerzeniem do rozpoznawania konwencji nazewnictwa. Używamy również log4net do naszego logowania.Log ninject resolved dependencies application start-up
Chciałbym, aby Ninject logował wszystkie znalezione zależności i do czego je doprowadzi, najlepiej przy uruchomieniu aplikacji.
Znalazłem rozszerzenie logowania, ale nie mogę znaleźć dokumentacji ani przykładów, jak go użyć, aby to uzyskać.
Edit:
Ponieważ poproszono tutaj jest klasa, która rejestruje domyślne powiązania na starcie, przy użyciu log4net
public class DefaultBindingGeneratorWithLogging: IBindingGenerator {private readonly jądra IKernel;
/// <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);
}
}
}
Uwaga: To rejestruje powiązania kiedy tylko są one aktywowane/dezaktywowane. Trochę inaczej niż rejestrowanie ich wszystkich przy starcie, ale może przydatne? – rcravens
Zdecydowanie przydatny. Wymyślę kod, który będzie mógł rejestrować wiązania oparte na konwencjach, tworząc własną klasę, aby rejestrować je w postaci, w jakiej zostały znalezione, ale chciałbym również zarejestrować aktywację/dezaktywację, więc jest to świetne. – Mant101
@ Mant101, jeśli mógłbyś udostępnić kod dla zapisów powiązań opartych na konwencjach, aby uzyskać kompletność, która byłaby świetna i pomocna w przypadku tego pytania. – user3141326