代码之家  ›  专栏  ›  技术社区  ›  Max Schmeling

是否可以使用StructureMap命名依赖项?

  •  1
  • Max Schmeling  · 技术社区  · 16 年前

    普苏埃多:

    public class MyServiceClass
         string connectionString;
    
         public MyServiceClass(string connectionString)
              this.connectionString = connectionString;
    
         public void DeleteObject
              var db = new EntitiesObject(connectionString)
    

    有没有办法在连接字符串构造函数参数上加上一个名称,以便StructureMap知道如何注入它?

    编辑: 我想到的一个解决方案是创建ThisDatabaseConnectionString和ThatDatabaseConnectionString类。。。这样它就可以根据类型注入连接字符串

    1 回复  |  直到 16 年前
        1
  •  1
  •   Mark Seemann    16 年前

    你可以这样做(假设 myConnectionString 是字符串实例):

    container.Configure(r => r
        .ForConcreteType<MyServiceClass>()
        .Configure.Ctor<string>().Is(myConnectionString));
    

    如果还需要从接口(或抽象基类)映射MyServiceClass,可以这样做:

    container.Configure(r => r
        .For<IServiceClass>()
        .Use<MyServiceClass>()
        .Ctor<string>().Is(myConnectionString));
    

    如果以前在容器中配置了命名连接字符串,则可以执行以下操作:

    container.Configure(r => r
        .For<string>()
        .Use("foo")
        .Named("connStr1"));
    container.Configure(r => r
        .For<string>()
        .Use("bar")
        .Named("connStr2"));
    container.Configure(r => r
        .ForConcreteType<MyServiceClass>()
        .Configure.Ctor<string>().Is((IContext ctx) => 
            ctx.GetInstance<string>("connStr2")));
    
    推荐文章