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

时间:2010-07-19 18:48:14

标签: dependency-injection .net-4.0 structuremap

如果可能的话,我希望能够使用StructureMap将命名依赖项注入到类中。我现在想要这个的主要原因是连接字符串注入。

我可能这样做的方式不对,但这就是我的方法(现在只需要添加注射):

伪:

public class MyServiceClass
     string connectionString;

     public MyServiceClass(string connectionString)
          this.connectionString = connectionString;

     public void DeleteObject
          var db = new EntitiesObject(connectionString)

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

编辑:我可以在运行时从配置数据库中确定多个连接字符串。

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

1 个答案:

答案 0 :(得分:1)

你可以这样做(假设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")));