2017-02-28 101 views
1

我正在尋找一種方法,我可以註冊具體的生活方式,具體類型如下所示的具體類型。簡單的注射器註冊具有生活方式的混凝土類型

public void SomeFunction(Type concrete, Lifestyle lifestyle) => 
    container.Register(concrete, lifestyle); 
+0

需要,我已經提供了什麼,我希望做一個代碼示例的詳細信息 – r3wt

+0

,SimpleInjector中沒有匹配的簽名。除非你能澄清你需要更多信息,否則我無法提供更多信息。 –

回答

2

當涉及到簡單的注射器使得單一個一對一的映射,實際上只有一種方法:

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都提供了TServiceTImplementation。所以最終,這個通話結束爲Register(typeof(TConcrete), typeof(TConcrete), Lifestyle.Transient)

所以,長話短說,下面的方法允許你註冊一個具體類型與生活方式:

Register<TConcrete>(Lifestyle.Scoped) 
Register<TConcrete, TConcrete>(Lifestyle.Scoped) 
Register(typeof(Concrete), typeof(Concrete), Lifestyle.Scoped); 
0

這應該工作

container.Register<SomeConcreteType,SomeConcreteType>(Lifestyle.Scoped); 

的生活方式是其中之一:短暫,作用域或辛格爾頓

+0

您可能需要再次查看該問題。該代碼示例使用的是Type not泛型。 –