3

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

4

1 回答 1

1

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

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

然后在对象工厂方法中:

LeadRepository instance = ioc.GetInstance<LeadRepository>();
ioc.Inject(typeof(ILeadRepository), instance);
ioc.Inject(typeof(LeadRepository), instance);

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

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

例如

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

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

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

myIoc.GetInstance<T>;
于 2011-08-26T11:48:58.407 回答