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 は true (これが問題です) で、x は false (期待どおりに動作します) です。これはバグですか、それとも何か間違っていますか?

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 がそのように使用されることになっているかどうかはわかりませんが、これは常に、inject コードが実行された後、ioc コンテナーから LeadRepository の同じインスタンスを引き出します。これが役立つか、誰かがそれがどのように行われることになっているかについて投稿できることを願っています。私は静的ファクトリや静的メソッドを使用したくないので、独自のファクトリを作成し、このファクトリ内のすべてが、上記のコードを使用して 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 に答える