@ Mant101, если бы вы могли поделиться кодом для ведения журнала привязок на основе соглашения для полноты, это было бы здорово и полезно для этого вопроса.

чали использовать Ninject версии 2 в качестве нашего контейнера IoC вместе с расширением для разрешения соглашений об именах. Мы также используем log4net для нашей регистрации.

Я хотел бы, чтобы Ninject заносил в журнал все найденные зависимости и что разрешит их, предпочтительно при запуске приложения.

Я нашел расширение для ведения журнала, но не могу найти документацию или примеры того, как его использовать, чтобы получить это.

Редактировать:

Так как он был запрошен, вот класс, который регистрирует привязки по умолчанию при запуске, используя log4net

открытый класс DefaultBindingGeneratorWithLogging: IBindingGenerator {частное только для чтения ядро ​​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);
        }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос