C# 从容器中为构造函数类指定固定值和其他变量

C# 从容器中为构造函数类指定固定值和其他变量,c#,asp.net-mvc,castle-windsor,C#,Asp.net Mvc,Castle Windsor,我有一个舞台,一些界面,还有注册部分。问题是我需要将一些参数定义为固定参数,而将其他参数定义为变量 interface IDoSomething { void DoWork(); } interface IDoMath(){ void DoWork(); } interface IBehaviorBusiness{ void Do(); } class BehaviorBusiness { ... public BehaviorBusiness(IDoSomething doSo

我有一个舞台,一些界面,还有注册部分。问题是我需要将一些参数定义为固定参数,而将其他参数定义为变量

interface IDoSomething {
 void DoWork();
}

interface IDoMath(){
 void DoWork();
}

interface IBehaviorBusiness{
 void Do();
}

class BehaviorBusiness {
 ...
 public BehaviorBusiness(IDoSomething doSomething, IDoMatch doMatch, string connection){};
 ...
}
windsor容器是否可以在声明中定义参数连接,并从容器中获取
IDosomething
IDoMatch

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

 container.Register(
   Component.For<IDoMatch>()
   ...
 );
container.Register(
用于()的组件
...
}
集装箱。登记(
用于()的组件
...
);
这就是具体问题

 container.Register(
   Component.For<IBehaviorBusiness>()
   .ImplementedBy<BehaviorBusiness>()
   .DependsOn(Dependency.OnComponent<IDoSomething, [default]>(),
              Dependency.OnComponent<IDoMatch, [default]>(),
              Dependency.OnValue("connection", connectionString))
    .LifeStyle.Transient
   );
container.Register(
用于()的组件
.由()实施
.DependsOn(Dependency.OnComponent(),
Dependency.OnComponent(),
Dependency.OnValue(“connection”,connectionString))
.短暂的
);

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

如果连接字符串来自应用程序设置,请使用:

container.Register(
用于()的组件
.由()实施
.DependsOn(Dependency.OnAppSettingsValue(“连接”、“连接字符串”))
.短暂的
);

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

@PatrickQuirk答案是正确的,但我认为更好的方法是创建IConnectionString提供程序或直接IConnectionProvider,并在ctor中提供它,而不是直接参数。这样,特定类就没有责任每次都要创建/管理/处理连接。从另一个组件提供连接,然后将其合并,而不是进行处理如何?这样,您将保留SRP,不仅是为了保留一些原则,也是为了代码的可维护性。您能举一个例子说明连接字符串的用法吗t非常小且简单。您是对的。最后,我更改了用于查询的虚拟接口的连接,更新了公共接口IDbContext{DataSet GetDataSet(string strmSql);DataTable GetDataTable(string strmSql);int ExecuteSql(string strmSql);}一些真的simple@OgnyanDimitrov我在哪里可以阅读有关实现IConnectionString o IConnectionProvider的最佳实践?下周我们将进行一些非常严肃的讨论,也许可以阅读一些关于这个主题的内容,这将是合适的。我正在考虑使用EF或NHibernateThere在这方面没有最佳实践。这是一个简单的界面h是一个简单的实现。在您的实现中,您必须将构建连接的逻辑放在其他组件之间,否则您将在其他组件之间传播和繁殖。
container.Register(
    Component.For<IBehaviorBusiness>()
    .ImplementedBy<BehaviorBusiness>()
    .DependsOn(Dependency.OnAppSettingsValue("connection", "connectionString"))
    .LifeStyle.Transient
);