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

时间:2009-08-23 11:07:23

标签: 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为假 (按预期工作)。这是一个错误,还是我在做什么 错?

1 个答案:

答案 0 :(得分:1)

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

         "For^ILeadRepository^().Use^LeadRepository^();"

^应该是一个括号。我出于某种原因不能在这里打字。

然后在对象工厂方法中:

       " LeadRepository instance = ioc.GetInstance^LeadRepository^();
        ioc.Inject(typeof(ILeadRepository), instance);
        ioc.Inject(typeof(LeadRepository), instance); "

其中ioc是IContainer。 再次,我不确定Inject是否应该像这样使用,但这总是相同的 在注入代码运行后,引导ioc容器的LeadRepository实例。 希望这有帮助,或者有人可以发布它应该如何完成。 我不喜欢使用静态工厂或静态方法,所以我创建了自己的工厂,这个工厂内的所有东西都使用上面的代码从ioc容器中抽出独特的实例。

-----假设你想要一个独特的实例,那就是每个工厂的singelton。 并且您总是希望返回相同的实例。我发现了一种更好的方法,即在工厂中使用子容器:

e.g。

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

             myIoc = myParentContainer.GetNestedContainer(); 

             myIoc.AssertConfigurationIsValid();

..然后可以使用以下代码获取相同的实例:

           myIoc.GetInstance<T>;