我是IoC和DI的初学者.我希望能够使用autofac(或任何其他合适的.NET IoC工具)动态解析连接和连接工厂.
一个场景可能是将连接实现更改为另一个具有更多跟踪设施的实现.
当我将DI和IoC应用于下面的代码时,我在构造函数等中得到了一堆namedParameter.连接工厂返回一个带有唯一端口的新连接(愚蠢的例子,只是为了表明我需要在工厂中保持某种状态)
我想我可以使用属性注入的IP和端口范围,但是这样,我不能保证连接将具有IP或端口,这是构造函数的要点.此外,命名参数也使我依赖于参数的名称.
想法,模式,IoC指针非常感谢!
更新:
更具体:如何将连接类更改为可注入?我应该选择房产吗?或者我能做的任何技巧都可以通过构造函数参数获得更加类型安全的解析?
public interface IConnection {
void Open();
void Close();
string Execute(string command);
}
public interface IConnectionFactory {
IConnection CreateConnection();
}
public class Connection : IConnection {
...
public Connection(String ip, int port) {
_ip = ip;
_port = port;
}
public string Execute() {}
public void Open() {}
public void Close() {}
}
public class ConnectionFactory : IConnectionFactory {
//How would I resolve this?
public ConnectionFactory(string ip, int fromPort) {
...
}
public …Run Code Online (Sandbox Code Playgroud) 我的 Windows 事件日志中有一个 IP 地址字段,其中 IP 地址前面包含类似“::fffff:”的字符。我无法更改此处的源,因此我必须在 Logstash 中修复此问题。
我一定很不擅长谷歌搜索,但我真的找不到一种简单的方法来从logstash中的IP地址字段中删除这些字符。
我已经尝试过例如
if ("" in [event_data][IpAddress]) {
mutate {
add_field => { "client-host" => "%{[event_data][IpAddress]}"}
gsub => ["client-host", ":", ""]
}
dns {
action => "replace"
reverse => [ "client-host" ]
}
}
Run Code Online (Sandbox Code Playgroud)
但运气不好,结肠仍然在那里。如何在 Logstash 中替换字符串“::ffff:10.0.36.39”中的“::ffff:”?
假设经典的Order / OrderLine业务情景。
public class Order {
...
public void AddOrderLine(OrderLine ol) {
this.OrderLines.Add(ol);
UpdateTaxes();
}
private void UpdateTaxes() {
//Traverse the order lines
//Collect the VAT amounts etc
//Update totals
var newTaxes = Orderlines.SelectMany(ol => ol.GetTaxes());
Taxes.Clear();
Taxes.Add(newTaxes);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我们认为我们需要更好地处理税款,对不同国家/地区的客户采用不同的方式,其中一些国家需要收取增值税,而其他国家则不需要收取增值税。
简而言之,税收规则将取决于客户的位置,购买的物品等。我们将如何做?我们是否应该在UpdateTaxes中放入很多代码?我们可以使用税收计算器工厂并在UpdateTaxes中引用它吗?
private void UpdateTaxes() {
var taxRules = TaxRulesFactory.Get(this);
var taxes = taxRuleCalc.Apply(this);
Taxes.Clear();
Taxes.Add(taxes);
}
Run Code Online (Sandbox Code Playgroud)