2011-02-28 158 views
0

我想註冊泛型類及其構造函數。像這樣:StructureMap泛型類註冊與構造函數

 ObjectFactory.Initialize(
      action => 
      { 
       action.SelectConstructor<IRepository<>>(() => new Repository<>(LifetimeManager.Current)); 
      }); 

但我不怎麼能這樣做?

注意:LifetimeManager.Current是靜態操作。如果我不關心構造函數,我可以寫這個,action.For(typeof(IRepository<>)).Use(typeof(Repository<>));但是今天我需要通過DI給Repository類UnitOfWork參數。

謝謝。

+0

檢查這個職位..它回答類似的問題.. http://stackoverflow.com/questions/2824088/passing-constructor-arguments-when-using-structuremap – Chandu 2011-02-28 01:43:40

回答

1

我認爲這會爲你工作:

action => action.For<IUnitOfWork>().Use(() => LifetimeManager.Current)); 
action => action.For(typeof (IRepository<>)).Use(typeof (Repository<>))); 

這是提供的信息庫構造具有IUnitOfWork的參數。只要確保Repository類的構造函數中的所有參數都已註冊到容器中,並且您應該很好。

如果您在Repository類中沒有多個構造函數,並且您想選擇特定的構造函數,則不需要使用SelectConstructor方法。