初始化惰性实例时将参数传递给构造函数

2023-12-02

据我所知,如果声明了一个变量Lazy,然后当我们使用Value财产。

我需要传递一些参数给它Lazy实例但找不到正确的语法。 这不是我的设计,我正在使用 MEF 并且ExportFactory,它返回我Lazy我的零件的实例。我的部件有构造函数,我需要使用一些参数调用这些构造函数。


您可以导出自己的Func反而:

public class FooFactory
{
    [Export(typeof(Func<string,int,ExportLifetimeContext<IFoo>>))]
    public ExportLifetimeContext<IFoo> CreateFoo(string param1, int param2)
    {
        Foo foo = new Foo(param1, param2);
        return new ExportLifetimeContext<IFoo>(foo,
            delegate
            {
                // Clean-up action code goes here. The client might not be able 
                // to do this through the IFoo interface because it might not
                // even expose a Dispose method.
                //
                // If you created other hidden dependencies in order to construct
                // Foo, you could also clean them up here. 
                foo.Dispose();
            });
    }
}

并将其导入到其他地方:

[Export(typeof(ISomething))]
public class FooUser : ISomething
{
    private readonly Func<string,int,ExportLifetimeContext<IFoo>> fooFactory;

    [ImportingConstructor]
    public FooUser(Func<string,int,ExportLifetimeContext<IFoo>> fooFactory)
    {
        this.fooFactory = fooFactory;
    }

    public void DoSomething()
    {
        using (var fooLifetime = this.fooFactory("hello", 3))
        {
            IFoo foo = fooLifetime.Value;
            ...
        }
    }
}

如果您不需要清理操作,那么您可以通过扔掉所有的来大大简化这一过程ExportLifetimeContext stuff.

然而,一些实现IFoo可能是一次性的(或依赖于其他一次性物品),而其他则不是。所以最正确的做法是在抽象中构建一个“我已经完成了这个对象”的信号,这就是ExportLifetimeContext提供。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化惰性实例时将参数传递给构造函数 的相关文章

随机推荐

  • 为什么 Java 中有数组和数组

    我遇到过这两个文档 该类的 Java 文档Array 该类的 Java 文档Arrays 我想知道这两个类之间有什么区别 它们都提供了一组不同的静态方法 但为什么它们是分开的呢 更深层次的区别是什么 它们之间的关系与普通数组实例之间的关系是
  • stage 关键字是否在 YAML 文件中的 Azure DevOps 中定义构建或部署管道

    我想知道我们是否考虑这个 YAML 代码块 如果它已经被视为构建和发布管道 或者我们需要定义阶段来表征它 下面的代码可以工作 但运行时看不到各个阶段 然而 在这种情况下 它会构建并部署到 Azure 所以这就是我问的原因 我正在寻找正确的术
  • 限制线程数

    我有一个包含我要下载的项目的列表 我使用 for 循环来迭代列表 对于此列表中的每个项目 我启动一个引用该项目的新线程 我的问题是我想同时限制 maxDownload for int i downloadList Count 1 i gt
  • 在 XMPPFramework 和 Swift 2 中未调用 didReceiveInvitation()

    我正在创建聊天应用程序 例如Whatsapp 我已经成功编写了文本聊天 图像 音频 视频传输的功能 现在我正在创建多用户聊天 经过长时间的研发 我问这个问题 请告诉我我的代码中做错了什么 我已经遵循了所有这些教程 但运气不佳 https g
  • 在 Java Graphics2D 中,文本如何在矩形上居中对齐?

    在这段代码中 我有一个窗口 其中一个角落有一个蓝色框 我需要在此框上对齐文本中心 public class drawComponent extends JComponent public void paintComponent Graphi
  • Keras 不平衡数据集的多重损失

    My Model 我建立了一个暹罗网络 它有两个输入和三个输出 所以我的损失函数是 total loss alpha loss1 alpah loss2 1 alpah loss3 loss1 and loss2 is categorica
  • Google 搜索 API - 仅返回 4 个结果

    经过大量实验和谷歌搜索 以下 Python 代码成功调用了 Google 的搜索 APi 但只返回 4 个结果 在阅读了 Google 搜索 API 文档后 我认为 start 会返回其他结果 但这并没有发生 有人可以指点一下吗 谢谢 Py
  • 有没有办法确定 Apple Watch 和 iPhone 之间的粗略距离?

    我知道在 Apple Watch 发布之前这个问题可能无法解答 但有人知道是否有办法确定 Apple Watch 和 iPhone 之间的粗略距离 以英尺为单位 目前 WatchKit框架不会向您提供此类信息 因为第三方应用程序的功能仍然相
  • WCF 64 位不工作

    我正在尝试开发一个在 64 位环境中运行的简单 WCF 服务 我在Windows 7下启动VS2010 新解决方案 gt WCF 项目 gt 运行 gt 工作正常 一旦我更改项目的属性以使其在 64 位中编译 运行它就会抛出以下异常 Cou
  • 将多个 csv 文件平均为 r 中的 1 个平均文件

    我有大约 300 个风速 温度 压力等的 csv 文件 每列都是 2007 年到 2012 年的不同时间 每个文件都来自不同的位置 我想将所有文件合并为一个 即所有 300 个文件的平均值 因此 新文件中每个文件的行数和列数都相同 但每个单
  • Android - 清除 Facebook 访问令牌

    我有一个SettingsActivity其中有多种选项 包括查找 Facebook 好友和注销 因此 当用户选择查找她的 Facebook 好友时 她将被发送到另一个活动 我让她使用她的 Facebook 帐户登录并保存她的访问令牌 然后
  • 当容器是超链接时,Flex 图像不会随屏幕尺寸缩小

    有人可以告诉我这是否是 Flexbox 的一个未记录的错误 或者我只是做错了 我有 3 个图像在 div 容器内排成一行 这对人们来说很简单 如果没有任何超链接 所有 3 个图像都会按其应有的方式完美缩小 div style width 1
  • 有没有适用于 Java Swing 的优秀且免费的日期和时间选择器? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有没有适用于 Java Swing 的优秀且免费的日期和时间选择器 有很多可用的日期选择器 但没有日期和时间选择器 这是迄今为止我遇到的最接近的 寻找日期和时间选择器 Anybody
  • iOS 在 iOS 6 中隐藏标签栏会产生黑条(iOS 6 的修复会破坏 iOS 7!)

    我有一个选项卡式应用程序 在一个选项卡中有一个UIWebView 当我将设备旋转到横向时 我已经制作了UIWebView全屏显示 同时隐藏状态和标签栏 我已经在 iOS 6 中工作了 最初在旋转和隐藏选项卡栏时 它会在选项卡栏所在的位置留下
  • Spring引导redirectAttributes.addFlashAttribute不保留立即重定向中的值

    我有一个实现 GET POST GET 重定向模式的控制器类 我尝试在 POST 请求中使用 addFlashAttribute 并重定向到 GET 但 GET 中的模型对象不包含设置值 这是我的代码 Controller RequestM
  • 如何以编程方式更改 Eclipse 首选项

    应该采用什么方法来更改 Eclipse 首选项 它们存储在
  • 在 C# 中使用正则表达式突出显示单词列表

    我有一些包含缩写的网站内容 我有该网站公认的缩写列表及其解释 我想创建一个正则表达式 它允许我用一些标记替换内容中找到的所有可识别的缩写 例如 内容 This is just a little test of the memb to see
  • 使选定的文本视图字符串变为粗体、斜体、下划线,就像 iOS 的本机“Notes”应用程序一样

    是否有任何帮助可以使选定的文本字符串视图变为粗体 斜体 下划线 就像 iOS 的本机 Notes 应用程序一样 请给我有用的链接 我厌倦了一整天的寻找 非常感谢 我附上了我的代码 使属性字符串粗体和斜体都像iPhone Notes 的本机应
  • java:在 Mac OsX 上禁用 TrayIcon 右键单击

    我正在尝试开发一个由系统托盘图标提供的 Mac OsX 应用程序 因此在第一次尝试使用最简单的代码来实现它后 我注意到 mac osX 10 8 上的每个应用程序托盘图标 系统和用户应用程序 都允许通过左键和右键单击激活相对弹出菜单 但在我
  • 初始化惰性实例时将参数传递给构造函数

    据我所知 如果声明了一个变量Lazy 然后当我们使用Value财产 我需要传递一些参数给它Lazy实例但找不到正确的语法 这不是我的设计 我正在使用 MEF 并且ExportFactory 它返回我Lazy我的零件的实例 我的部件有构造函数