StructureMap AlwaysUnique 似乎不适用于构造函数注入(inject)

标签 structuremap

我的 GeneralRegistry 中有这个配置:

ForRequestedType<IClientBonusHistoryLoadTask>().AlwaysUnique().TheDefaultIsConcreteType<ClientBonusHistoryLoadTask>();

我有这个代码:
public ClientAdvantagesUpdateTask(IBaseRepo<Client> repository, INHUnitOfWorkProvider uowProvider, IClientBonusHistoryLoadTask clientBonusHistoryLoadTask, ClientBonusHistoryLoadTask masterClientBonusHistoryLoadTask) : base(repository, uowProvider)
    {
      _clientBonusHistoryLoadTask = clientBonusHistoryLoadTask;
      _masterClientBonusHistoryLoadTask =
masterClientBonusHistoryLoadTask;

      bool y = clientBonusHistoryLoadTask.Equals
(masterClientBonusHistoryLoadTask);

      var task = ObjectFactory.GetInstance<IClientBonusHistoryLoadTask>
();
      var task2 =
ObjectFactory.GetInstance<IClientBonusHistoryLoadTask>();

      bool x = task.Equals(task2);
    }

出于某种原因,y 为真(这是问题所在)而 x 为假
(按预期工作)。这是一个错误,还是我在做什么
错误的?

最佳答案

嗨,我有同样的问题,总是独一无二的并不是让它总是独一无二的。
但是几乎没有文档知道它应该做什么。
我使用以下内容:

For<ILeadRepository>().Use<LeadRepository>();

然后在对象工厂方法中:
LeadRepository instance = ioc.GetInstance<LeadRepository>();
ioc.Inject(typeof(ILeadRepository), instance);
ioc.Inject(typeof(LeadRepository), instance);

其中 ioc 是 IContainer .
同样,我不确定 Inject 是否应该这样使用,但这总是一样的
运行注入(inject)代码后,将 LeadRepository 实例从 ioc 容器中取出。
希望这会有所帮助,或者有人可以发布应该如何完成的信息。
我不喜欢使用静态工厂或静态方法,所以我创建了自己的工厂,并且该工厂内的所有内容都使用上面的代码从 ioc 容器中提取出唯一的实例。

假设您想要一个唯一的实例,即每个工厂一个单例。
并且您总是希望返回相同的实例。我找到了一种更好的方法,那就是在工厂中使用子容器:

例如
myParentContainer = new Container(x => { 
                  x.AddRegistry<ObjectFactoryModelRegistry>();
                  x.AddRegistry<ServiceRegistry>();
                  });

myIoc = myParentContainer.GetNestedContainer(); 
myIoc.AssertConfigurationIsValid();

然后可以使用以下代码获取相同的实例:
myIoc.GetInstance<T>;

关于StructureMap AlwaysUnique 似乎不适用于构造函数注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318299/

相关文章:

c++ - 插入 std::map 时检测到 glibc(内存错误)

c# - 如何在 StructureMap 中使用 InstanceScope.HttpSession?

null - 如何使用 StructureMap 将 null 作为接口(interface)的默认实例传递?

c# - Singleton 中的结构图返回多个实例

.net - 如何在 StructureMap Registy 构造函数中获取实例?

dependency-injection - 需要 WCF 的完整 DI 示例

c# - StructureMap 和泛型 - 如何指定默认构造函数?

WCF 跨多个客户端共享 IClientMessageInspector 实例

StructureMap: "No default instance of plugin defined"- 尽管它是

StructureMap 3 获取请求的类型