var response = client.UploadString("http://my_actual_server_name:8080/SimpleService", data);
和Lazy<T>
都不接受Lazy<T, TMetadata>
。这似乎使得当创建逻辑需要一些额外的上下文时,懒得创建一个对象是不可能的。
这是我正在努力实现的一个被编造的例子:
Func<TSomething, T>
此处,需要private readonly Lazy<IDbConnection, IStatement> insertStatement =
new Lazy<IDbConnection, IStatement>(
conn => conn.CreateStatement(...));
public void Apply(IDbConnection connection)
{
this.insertStatement.GetValue(connection).Execute(...);
}
个实例来创建IDbConnection
实例所容纳的IStatement
。这里的假设是,一旦Lazy
被“知道”,它将保持不变。换句话说,IDbConnection
不需要随时间变化,因为IStatement
不会。
我已经考虑过替代方法,我的类在其构造函数中使用IDbConnection
的实例,并使用该参数的闭包创建IDbConnection
实例。但是,实际情况是获取连接是一个异步操作,我很难看到如何在我的依赖对象需要之前实现这一点。这是我打算追求的问题,但仍然想知道这个问题的答案......
是否有任何方法可以促进Lazy
使用的工厂可以传递一些帮助它创建对象实例的上下文的场景?
答案 0 :(得分:0)
我无法发表评论,所以,为了尝试帮助你,我需要像回答一样发表评论。
如果我理解正确,您希望使用单例连接创建单个Statement。如果这是我的想法,也许下面的代码可以帮助你:
new Lazy<IStatement>(() => ConnectionSingleton.Instance.CreateStatement());
如您所见,您可以委托其他类创建Statement