Замок Виндзор 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". Вы можете использовать это для разрешения зависимости.