Замок Виндзор - передача типа в качестве параметра конструктора - PullRequest
1 голос
/ 21 марта 2012

У меня есть класс, который принимает Type в качестве параметра конструктора.Как я могу зарегистрировать это в контейнере Виндзор?

   public Class NLogLogger : ILogger
   {
      private NLog.Logger _logger;  
      public NLogLogger(Type type)
      {
           _logger = NLog.LogManager.GetLogger(type.FullName);
      }
    ...
   }

Я пытаюсь зарегистрировать это так:

            container.Register(Component.For(typeof(ILogger))
                                .ImplementedBy(typeof(NLogLogger))
                                .LifestyleTransient()
                                .DependsOn(new Hashtable
                                            {
                                                {"type", ???}
                                            }));

Мне нужно заполнить ???.Я не мог понять, как я могу передать вызывающему классу Type там.

1 Ответ

2 голосов
/ 21 марта 2012

Обновление

В соответствии с вашим обновлением вы хотите ввести тип, чтобы вы могли использовать его для регистрации.Есть два решения.

public class ClassDependentOnLogger
{
    private ILogger _logger;  
    public ClassDependentOnLogger(ILogger logger)
    {
        _logger = logger;
    }

    ....

}

1 - Используйте Windsor SubDependancyResolver .В приведенном ниже примере показано, как вернуть и создать экземпляр ILog, но вы можете легко адаптировать его для возврата типа вместо этого, если это именно то, что вы хотели сделать:

Нет необходимости в NLoggerClass, описанном в вашем примере.

...