指定构造函数类固定值和容器中的其他变量

时间:2014-12-15 18:26:10

标签: c# asp.net-mvc castle-windsor

我所拥有的是舞台,一些界面以及注册部分。问题是我需要将一些参数定义为固定参数,将其他参数定义为变量。

interface IDoSomething {
 void DoWork();
}

interface IDoMath(){
 void DoWork();
}

interface IBehaviorBusiness{
 void Do();
}

class BehaviorBusiness {
 ...
 public BehaviorBusiness(IDoSomething doSomething, IDoMatch doMatch, string connection){};
 ...
}

是否可以使用windsor容器在声明中定义参数连接,并从容器中取出IDosomethingIDoMatch

 container.Register(
   Component.For<IDoSomething>()
   ...
 }

 container.Register(
   Component.For<IDoMatch>()
   ...
 );

这是具体问题。

 container.Register(
   Component.For<IBehaviorBusiness>()
   .ImplementedBy<BehaviorBusiness>()
   .DependsOn(Dependency.OnComponent<IDoSomething, [default]>(),
              Dependency.OnComponent<IDoMatch, [default]>(),
              Dependency.OnValue("connection", connectionString))
    .LifeStyle.Transient
   );

如果存在,哪个语法正确?

1 个答案:

答案 0 :(得分:1)

如果连接字符串来自您的应用程序设置,请使用Dependency.OnAppSettingsValue()

container.Register(
    Component.For<IBehaviorBusiness>()
    .ImplementedBy<BehaviorBusiness>()
    .DependsOn(Dependency.OnAppSettingsValue("connection", "connectionString"))
    .LifeStyle.Transient
);

这里,“connection”是类'构造函数中参数的名称,“connectionString”是应用程序设置(即Web.Config)中连接字符串值的键。您不需要指定其他值,Windsor将像往常一样解决它们。