我正在尋找一種方法,我可以註冊具體的生活方式,具體類型如下所示的具體類型。簡單的注射器註冊具有生活方式的混凝土類型
public void SomeFunction(Type concrete, Lifestyle lifestyle) =>
container.Register(concrete, lifestyle);
我正在尋找一種方法,我可以註冊具體的生活方式,具體類型如下所示的具體類型。簡單的注射器註冊具有生活方式的混凝土類型
public void SomeFunction(Type concrete, Lifestyle lifestyle) =>
container.Register(concrete, lifestyle);
當涉及到簡單的注射器使得單一個一對一的映射,實際上只有一種方法:
Container.Register(Type serviceType, Type implementationType, Lifestyle lifestyle);
所有其他方法只是方便的ov或者在這個方法中使用「快捷方式」。例如下面的方法:
Container.Register<TService, TImplementation>(Lifestyle)
最終通過調用Register(typeof(TService), typeof(TImplementation), lifestyle)
回落到非通用超載。
這同樣適用於沒有在Lifestyle
採取重載:
Container.Register<TService, TImplementation>()
他們只是向前對於給定的實現類型,這是-under默認配置 - 供電所確定的生活方式的調用是瞬態生活:Register<TService, TImpementation>(Lifestyle.Transient)
。
而且有多個重載,其允許快捷登記的具體類型,如:
Container.Register<TConcrete>()
此方法調用轉發給Register<TConcrete, TConcrete>()
。換句話說,TConcrete
都提供了TService
和TImplementation
。所以最終,這個通話結束爲Register(typeof(TConcrete), typeof(TConcrete), Lifestyle.Transient)
。
所以,長話短說,下面的方法允許你註冊一個具體類型與生活方式:
Register<TConcrete>(Lifestyle.Scoped)
Register<TConcrete, TConcrete>(Lifestyle.Scoped)
Register(typeof(Concrete), typeof(Concrete), Lifestyle.Scoped);
這應該工作
container.Register<SomeConcreteType,SomeConcreteType>(Lifestyle.Scoped);
的生活方式是其中之一:短暫,作用域或辛格爾頓
您可能需要再次查看該問題。該代碼示例使用的是Type not泛型。 –
需要,我已經提供了什麼,我希望做一個代碼示例的詳細信息 – r3wt
,SimpleInjector中沒有匹配的簽名。除非你能澄清你需要更多信息,否則我無法提供更多信息。 –