2009-08-23 65 views
3

我有我的GeneralRegistry此配置:StructureMap AlwaysUnique似乎不使用構造器注入工作

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是假的 (按預期工作)。這是一個錯誤,或者我在做什麼 錯?

+0

你有沒有設法解決這一問題? – 2010-06-21 06:18:50

回答

1

您好我有同樣的問題,始終是唯一不使它總是uniuqe。 ,但幾乎沒有文件知道它應該做什麼。 我使用以下命令:

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

^應該是一個bracket.that我不能在這裏鍵入某些原因。

,然後內部的對象工廠方法:

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

其中IOC是一個的IContainer。 再次,我不確定Inject是否應該像這樣使用,但是它總是在注入代碼運行後將LeadRepository的實例從ioc容器中拉出。 希望這可以幫助或有人可以發佈它應該如何完成。 我不喜歡使用靜態工廠或靜態方法,所以我做了我自己的工廠,並且使用上面的代碼,此工廠中的所有內容都將獨特的實例從ioc容器中取出。

-----假設你想有一個唯一的實例,即每工廠singelton。 並且您總是希望返回相同的實例。我發現了一個更好的方法來做到這一點,那就是在工廠中使用子容器:

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

      myIoc = myParentContainer.GetNestedContainer(); 

      myIoc.AssertConfigurationIsValid(); 

..然後可以通過下面的代碼獲得相同的實例:

  myIoc.GetInstance<T>;