注册和
问题描述:
我已经使用MVVM在应用程序下面硬编码设置在一个循环解析相关:注册和
var ips = configFile.Read();
for (string ip in ips)
{
var tcpClient = new TcpClient(ip);
var stream = (Stream) tcpClient.GetStream();
var service = new Service(stream);
var connectionViewModel = new ConnectionViewModel(service);
var extendedViewModel = new ExtendedViewModel(connectionViewModel);
}
甲数量的IP地址被从文件中读取,并且在视图模型的每个地址的结果被创建的显示来自IP的内容。
如果我想让DryIoc处理此问题,最佳方法是什么?所有new
对象都是唯一的foreach循环。使用Func键通IP
答
可能的选项:
var c = new Container();
c.Register<ExtendedViewModel>();
c.Register<ConnectionViewModel>();
c.Register<Service>();
c.Register<TcpClient>();
foreach (var ip in ips) {
var getVM = c.Resolve<Func<string, ExtendedViewModel>>();
var vm = getVM(ip);
// use vm
}
更新:
对于流,添加下列注册不改变分辨率部分:
c.Register<Stream>(Made.Of(
_ => ServiceInfo.Of<TcpClient>(),
tcpClient => (Stream)tcpClient.GetStream()));
制造。与Func和其他包装器分辨率很好地玩,并且可以在对象图的中间。这就是为什么它比RegisterDelegate更可取。
有趣。这是否唯一地解决了所有的依赖关系?我用流添加了一个问题的变体。答案可以修改以包含变体吗? – kasperhj
我已经更新了我的答案。它解决了其余的依赖关系,通过从容器中解析它们而不是作为Func提供。 – dadhi
谢谢。在注册TcpClient时,我收到一个错误:注册的一次性临时服务TcpClient {关键字}。我应该如何继续? – kasperhj