StructureMap 转发命名实例
StructureMap forwarding named instances
我正在使用 StructureMap 4.4.1。在我的代码中,我有 1 个具体的 class、TransactionalDatabaseClient
,它实现了 ITransactionalDatabaseClient
,它继承自 IDatabaseClient
。我正在使用 Forward
方法重定向对 ITransactionalDatabaseClient
的请求,以使用基本接口 IDatabaseClient
.
的注册来解决
这是我Registry
的相关部分:
For<IDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "sqlserver")).Named("sqlserver");
For<IDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "oracle")).Named("oracle");
Forward<IDatabaseClient, ITransactionalDatabaseClient>();
问题是当我请求 ITransactionalDatabaseClient
的命名实例时,StructureMap 抱怨命名实例不存在。
我做错了什么?有解决办法吗?
遗憾的是,转发和命名实例不能一起工作。
当您向 StructureMap 请求命名实例时,它会查找专门为该接口注册的实例,并且不会检查转发。对我有用的解决方案是放弃转发并注册具体两次,每个接口一次。
你的问题看起来像这样:
For<IDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "sqlserver")).Named("sqlserver");
For<IDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "oracle")).Named("oracle");
For<ITransactionalDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "sqlserver")).Named("sqlserver");
For<ITransactionalDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "oracle")).Named("oracle");
我正在使用 StructureMap 4.4.1。在我的代码中,我有 1 个具体的 class、TransactionalDatabaseClient
,它实现了 ITransactionalDatabaseClient
,它继承自 IDatabaseClient
。我正在使用 Forward
方法重定向对 ITransactionalDatabaseClient
的请求,以使用基本接口 IDatabaseClient
.
这是我Registry
的相关部分:
For<IDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "sqlserver")).Named("sqlserver");
For<IDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "oracle")).Named("oracle");
Forward<IDatabaseClient, ITransactionalDatabaseClient>();
问题是当我请求 ITransactionalDatabaseClient
的命名实例时,StructureMap 抱怨命名实例不存在。
我做错了什么?有解决办法吗?
遗憾的是,转发和命名实例不能一起工作。
当您向 StructureMap 请求命名实例时,它会查找专门为该接口注册的实例,并且不会检查转发。对我有用的解决方案是放弃转发并注册具体两次,每个接口一次。
你的问题看起来像这样:
For<IDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "sqlserver")).Named("sqlserver");
For<IDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "oracle")).Named("oracle");
For<ITransactionalDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "sqlserver")).Named("sqlserver");
For<ITransactionalDatabaseClient>().Add(context => new TransactionalDatabaseClient(context.GetInstance<IConnectionManager>(), "oracle")).Named("oracle");