Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 结构图:基于元或上下文信息获取服务_C#_.net_Inversion Of Control_Structuremap - Fatal编程技术网

C# 结构图:基于元或上下文信息获取服务

C# 结构图:基于元或上下文信息获取服务,c#,.net,inversion-of-control,structuremap,C#,.net,Inversion Of Control,Structuremap,我的应用程序中有两种类型的搜索:国际搜索和国家搜索。两者的数据结构几乎相同,但数据源不同。我用相同的界面创建了两个不同的存储库。现在,我想根据上下文或元信息,使用结构图请求相应的存储库 例如,如果用户在国家搜索页面上,IoC容器应将国家存储库注入控制器。如果用户触发国际搜索,则应使用相同的控制器,但使用国际存储库 这是否可能与结构图?如果是,我如何实现它?您可以使用这样的命名实例 =>覆盖构造函数依赖项您可以使用如下命名实例 =>重写构造函数依赖项基于运行时值注入依赖项的最常见方法是使用工厂模式

我的应用程序中有两种类型的搜索:国际搜索和国家搜索。两者的数据结构几乎相同,但数据源不同。我用相同的界面创建了两个不同的存储库。现在,我想根据上下文或元信息,使用结构图请求相应的存储库

例如,如果用户在国家搜索页面上,IoC容器应将国家存储库注入控制器。如果用户触发国际搜索,则应使用相同的控制器,但使用国际存储库


这是否可能与结构图?如果是,我如何实现它?

您可以使用这样的命名实例
=>覆盖构造函数依赖项

您可以使用如下命名实例
=>重写构造函数依赖项

基于运行时值注入依赖项的最常见方法是使用工厂模式(例如抽象工厂模式)

通过这种方式,您可以本质上注入一个负责确定运行时值(例如,会话变量的存在)的类,然后基于该运行时值创建依赖项的适当实例(存储库)

我建议看一下抽象工厂模式,或者看一个如何设置它的示例


在不想自我提升的情况下,我还编写了一个示例,详细介绍了上述答案,这些答案应该会有所帮助。

基于运行时值注入依赖项的最常见方法是使用工厂模式(例如抽象工厂模式)

通过这种方式,您可以本质上注入一个负责确定运行时值(例如,会话变量的存在)的类,然后基于该运行时值创建依赖项的适当实例(存储库)

我建议看一下抽象工厂模式,或者看一个如何设置它的示例


在不想自我推销的情况下,我还整理了一份报告,详细介绍了上述答案,这些答案应该会有所帮助。

谢谢你的提示。我认为这种行为应该是国际奥委会框架的一部分,所以我不需要自己实施。这提出了几个问题。1.IoC容器通常在某些运行时值存在之前配置(在应用程序启动中)。2.您的IoC容器负责管理依赖关系,它是否真的应该了解围绕某些依赖关系的业务规则?如果类的依赖关系取决于数据库中计算的值,该怎么办。您的IoC容器是否应该知道如何连接到数据库?我不会这么说。这正是抽象工厂要解决的问题。@Harald-K。希望这有助于您解决问题。确实如此,即使这不是我所期望的或希望的;)谢谢你的提示。我认为这种行为应该是国际奥委会框架的一部分,所以我不需要自己实施。这提出了几个问题。1.IoC容器通常在某些运行时值存在之前配置(在应用程序启动中)。2.您的IoC容器负责管理依赖关系,它是否真的应该了解围绕某些依赖关系的业务规则?如果类的依赖关系取决于数据库中计算的值,该怎么办。您的IoC容器是否应该知道如何连接到数据库?我不会这么说。这正是抽象工厂要解决的问题。@Harald-K。希望这有助于您解决问题。确实如此,即使这不是我所期望的或希望的;)