.net - 构造新类型时如何将动态参数传递给 Structuremap?

标签 .net dependency-injection inversion-of-control structuremap

在我的应用程序中,有些情况下我的存储库需要将不同的参数传递给具体类型的构造函数。我希望能够做这样的事情:

var arg = (x == y) ? z : a;
ObjectFactory.GetInstance<IRepository>(arg);

根据某些条件,只能在创建 Repository 实例时构造参数。

如何才能做到这一点?

最佳答案

正如@Steven 还说的,我认为如果可能的话,您应该让需要依赖项(具有动态参数)的类将工厂作为参数,以便您可以控制使用者的创建。

使用结构映射,内置对此的支持,因此您无需构建工厂类。

让使用者将 Func 作为 ctor 参数并通过使用参数调用 Func 来创建存储库(依赖项):

public class Consumer
{
    public Consumer(Func<ArgumentType, IRepository> repositoryFactory)
    {
      _repositoryFactory = repositoryFactory;
    }

    public void CallRepository()
    {
       ArgumentType arg = (x == y) ? z : a;
       var repository = _repositoryFactory(arg);
       repository.GetById(...);
    }
}

在结构图的配置中,可以配置func:
For<Func<ArgumentType, IRepository>>().Use( arg => new Repository(arg));

关于.net - 构造新类型时如何将动态参数传递给 Structuremap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6407205/

相关文章:

c# - CultureInfo.Name 属性

c# - 如果不满足某些条件,如何停止加载 .NET 应用程序

.net - 从 Javascript 调用 Web 服务 - 它在幕后做了什么?

c# - 通过 StructureMap 定义 'HttpClient' 单例导致运行时未配置 'HttpMessageHandler' 的错误

java - 使用 spring ioc 可交换数据层

java - IOC容器: de-duplicating the configuration code

c# - Nuget 安装在 visual studio 2015

c# - ASP.NET MVC 2 中的基本 Controller 实现

c# - .NET 中的 IoC 是什么

c# - 谁以及如何在依赖注入(inject)中初始化接口(interface)