如果可能的话,我希望能够使用StructureMap将命名依赖项注入到类中。我现在想要这个的主要原因是连接字符串注入。
我可能这样做的方式不对,但这就是我的方法(现在只需要添加注射):
伪:
public class MyServiceClass
string connectionString;
public MyServiceClass(string connectionString)
this.connectionString = connectionString;
public void DeleteObject
var db = new EntitiesObject(connectionString)
有没有办法在连接字符串构造函数参数上添加名称,以便StructureMap知道如何注入它?
编辑:我可以在运行时从配置数据库中确定多个连接字符串。
编辑:我想到的一个解决方案是创建一个ThisDatabaseConnectionString和一个ThatDatabaseConnectionString类......这样就可以根据类型注入连接字符串
答案 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")));