Замок Виндзор ISubDependencyResolver получить имя параметра

У меня небольшая проблема с получением имени параметра с помощью Castle Windsor ISubDependencyResolver. У меня есть что-то вроде кода ниже, и в случае Foo, я бы хотел, чтобы myBar.BarName было "Foo_myBar"

Public Class Foo
{
    private readonly IBar myBar;
    Public Foo(IBar myBar){
        this.myBar = myBar;
    }
}

Public Class Bar: IBar
{
    Public string BarName {get; private set;}

    Public Bar(string barName){
        BarName = barName;
    }
}

public class BarNameResolver : ISubDependencyResolver
{
    public bool CanResolve(CreationContext context, 
            ISubDependencyResolver contextHandlerResolver, 
            ComponentModel model, 
            DependencyModel dependency)
    {
        return context.RequestedType == typeof (IBar)
               && dependency.TargetType == typeof (string)
               && dependency.DependencyKey.Equals("barName");
    }

    public object Resolve(CreationContext context, 
            ISubDependencyResolver contextHandlerResolver, 
            ComponentModel model,
            DependencyModel dependency)
    {

        return string.Format("{0}_{1}", 
                  context.Handler.ComponentModel.Name, 
                  **NameOfFooBarParameter**);


    }
}

Есть ли способ получить "myBar" в ISubDependencyResolver?

Мне нужно это иметь несколько экземпляров IBar в Foo с разными конфигурациями.

1 ответ

Поскольку BarNameResolver - это решение для определения зависимостей, легко смешать компонент и зависимость

public bool CanResolve(
   CreationContext context,
   ISubDependencyResolver contextHandlerResolver,
   ComponentModel model,
   DependencyModel dependency)
   {
       return context.RequestedType == typeof(Foo)
           && dependency.TargetType == typeof(IBar);
   }

   public object Resolve(
       CreationContext context,
       ISubDependencyResolver contextHandlerResolver,
       ComponentModel model,
       DependencyModel dependency)
       {
            var myBar  = dependency.DependencyKey;
            return null;
       }

В вашем примере переменная myBar теперь будет содержать строку "myBar". Вы можете использовать это для разрешения зависимости.

Другие вопросы по тегам