依赖注入wcf

2024-01-04

我想在 WCF 中注入接口的实现,但我想在 WCF 客户端中初始化依赖注入容器。因此,我可以为我的服务的每个客户端提供不同的实现。


当你使用svcutil.exe or the 添加服务参考在 Visual Studio 中的向导中,自动生成的多种类型之一就是客户端界面。我们就这样称呼它吧IMyService。还会有another自动生成的界面称为类似IMyServiceChannel实现 IMyService 和 IDisposable。在客户端应用程序的其余部分中使用此抽象。

由于您希望能够创建一个新通道并再次关闭它,因此您可以引入一个抽象工厂:

public interface IMyServiceFactory
{
    IMyServiceChannel CreateChannel();
}

在客户端应用程序的其余部分中,您可以依赖 IMyServiceFactory:

public class MyClient
{
    private readonly IMyServiceFactory factory;

    public MyClient(IMyServiceFactory factory)
    {
        if (factory == null)
        {
            throw new ArgumentNullException("factory");
        }

        this.factory = factory;
    }

    // Use the WCF proxy
    public string Foo(string bar)
    {
        using(var proxy = this.factory.CreateChannel())
        {
            return proxy.Foo(bar);
        }
    }
}

您可以创建包装 WCF 的 IMyServiceFactory 的具体实现ChannelFactory<T>作为一个实现:

public MyServiceFactory : IMyServiceFactory
{
    public IMServiceChannel CreateChannel()
    {
        return new ChannelFactory<IMyServiceChannel>().CreateChannel();
    }
}

现在,您可以通过将 IMyServiceFactory 映射到 MyServiceFactory 来配置 DI 容器。温莎城堡的做法如下:

container.Register(Component
    .For<IMyServiceFactory>()
    .ImplementedBy<MyServiceFactory>());

奖金信息:这里是如何将 WCF 服务与 DI 容器连接起来 https://stackoverflow.com/questions/2042609/injecting-data-to-a-wcf-service/2042858#2042858.

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

依赖注入wcf 的相关文章

随机推荐

  • HTML5 视频播放器阻止搜索

    我正在创建一系列视频教程 并希望防止用户向前查找和跳过部分 我将使用将用于桌面和 iPad 浏览器的 HTML5 视频播放器 理想情况下 我希望它也能在 iPhone 上运行 但我意识到你无法控制手机上的视频 因为它使用 iPhone 视频
  • 如何在训练期间切换 tf.train.Optimizers?

    我想从Adam https www tensorflow org api docs python tf train AdamOptimizer to SGD https www tensorflow org api docs python
  • Qt 如何连接到 Android 操作系统中现有的 SQLite 文件?

    我正在尝试连接到我的 qt 5 2 项目 在 Android 操作系统中 中的现有 SQLite 数据库文件 我应该在哪里保存此文件以使用以下代码加载它 QSqlDatabase addDatabase myfile sqlite 首先 您
  • c++ GetPrivateProfileString 从当前目录读取ini文件

    我正在 C 上创建一个 dll 这是一个 Visual Studio 项目 dll从ini文件中读取一些数据 我决定使用 GetPrivateProfileString 函数 它几乎完全有效 它在当前目录中看不到文件 我如何提供这个参数 称
  • 为什么我的 WordPress 博客中的页面重定向到本地主机?

    这是我的网站网址http www weblogicsol com http www weblogicsol com 这里我安装了一个WordPress 主题有网址http www weblogicsol com blog http www
  • selenium 2 无法连接到主机

    我在 facebook php webdriver 上工作 我在 Ubuntu 上工作 selenium 独立服务器与 webdriver 库位于同一目录中 我使用本地 IP 地址 192 168 x x 连接到 linux 当我执行以下代
  • 在 TypeScript 中使用类型元素剔除可观察数组

    我目前正在考虑将我们的项目迁移到 TypeScript 我发现了this https github com borisyankov DefinitelyTyped一组很棒的定义文件 我目前正在尝试使用该文件Knockout http kno
  • Angular订阅表单组中表单数组中的值变化

    我是 angular8 我在表单组内有一个表单数组 但我想检测某个输入的新更改 ngOnInit void this makeForm this fb group year Validators required amount Valida
  • 使用 CSS 删除焦点选项卡的发光边框

    我正在尝试删除蓝色发光边框 当窗格聚焦于我的 javaFX 应用程序中选项卡窗格中的选项卡时 会出现该边框 关于如何在 css 中执行此操作有任何想法吗 这是我当前的CSS tab fx background radius 0 fx bac
  • 为什么只有ListView.builder()中的内容不滚动?

    我有一个带有文本小部件和 ListView 的屏幕 当我尝试在 ListView 内滚动时 它不允许我滚动 我的主体是 SingleChildScrollView 但不为 ListView builder 提供滚动视图 我尝试将 ListV
  • 为什么在 Fortran 中某些数组没有正确对齐以进行矢量化?

    我正在尝试通过矢量化 for 循环来改进 Fortran 77 代码 我对矢量化相当陌生 虽然我可以获得矢量化代码 但优化报告告诉我 我的一些数组具有未对齐的访问权限 据我了解 这使得矢量化效率较低 我已手动向数组添加填充 以便对齐数据 这
  • R闪亮:在完成所有observeEvent代码之前更新tabsetpanel

    我想立即更新选项卡面板 而不是等到完成下载功能 在这里你可以找到一个简单的代码它有一个按钮 当按下它时 它会模拟下载并更新选项卡面板 我想在完成下载之前更新面板 Thanks server lt function input output
  • 如何更改 Win32 API 应用程序中的控件主题?

    如果我在 Win32 API 中创建一个按钮 则默认控制主题看起来像 Windows 95 98 按钮 我记得过去微软论坛告诉我如何获得XP风格 但我不记得如何做到这一点 有没有办法以编程方式或手动更改 Win32 应用程序中的控件主题 谢
  • 如何在 matplotlib 中调整(偏移)颜色条标题

    给出以下代码 imshow np arange 16 16 reshape 16 16 cb colorbar cb set label Foo cb set ticks 0 255 其产生 如何调整颜色条文本 Foo 使其向左偏移 在 0
  • 在 swift 4 中未调用通知中心观察者

    我正在尝试从 appdelegate 发布通知 NotificationCenter 并在另一个视图中接收通知 但未收到通知 发布通知 func xmppStream sender XMPPStream didReceive message
  • formGroup 需要一个 FormGroup 实例

    我在 Plunkr 上有一个 Angular 2 RC4 基本表单示例 它似乎抛出以下错误 在 Chrome DEV 控制台中 这是笨蛋 https plnkr co edit GtPDxw p preview https plnkr co
  • 如何将二叉搜索树转换为双向链表?

    给定一个二叉搜索树 我需要仅使用指向 C 中结构的指针将其转换为双向链表 通过以锯齿形顺序遍历 如下所示 给定树 1 2 3 4 5 6 7
  • jQuery - 如何检测项目当前是否在视口之外?

    我正在构建一个页面 该页面将使用 ajax 来更新主要内容区域 用户将单击左侧菜单栏中的项目来更新右侧的 div 并包含搜索结果 我想检测用户是否已向下滚动到目前为止 导致右侧结果 div 移出视口 但有人检测到这一点吗 没有测试 跨浏览器
  • WPF - 在代码隐藏中更改网格中控件的位置

    是否可以从代码隐藏更改控件在网格中的放置位置 例如 如果我在 Grid Row 1 中有一个按钮 我可以将其从代码隐藏更改为 Grid Row 0 吗 是的 去吧 Grid SetRow button 0 其中 button 是要更改的元素
  • 依赖注入wcf

    我想在 WCF 中注入接口的实现 但我想在 WCF 客户端中初始化依赖注入容器 因此 我可以为我的服务的每个客户端提供不同的实现 当你使用svcutil exe or the 添加服务参考在 Visual Studio 中的向导中 自动生成