2013-01-14 57 views
0

使用Castle Windsor ISubDependencyResolver獲取參數名稱有一點問題。 我有類似下面的代碼,並在富的情況下,我想myBar.BarName是「Foo_myBar」Castle Windsor ISubDependencyResolver獲取參數名稱

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**); 


    } 
} 

是的任何方式ISubDependencyResolver得到「myBar」?

我需要這個在不同配置的Foo中有多個IBar實例。

回答

0

由於BarNameResolver是subdepedency決心很容易混淆了部件和依賴

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」。您可以使用它來解決依賴關係。