我有兩個對象應該一起註冊,並且共享相同的生命週期範圍。我想提供一個註冊擴展來封裝這個並保持註冊的流暢性,但我需要一些幫助。下面就我在的情況:多註冊的流利配置
public static IRegistrationBuilder<?, ?, ?>
RegisterChannel<T>(this ContainerBuilder builder, Func<IComponentContext, ChannelFactory<T>> @delegate)
{
// channelfactory and sharedchannel should have same lifetime configuration
var channelfactoryreg = builder.Register(c => @delegate(c));
var sharereg = builder.RegisterType<Wcf.SharedChannel<T>>();
// is it possible to combine them and return?
return ???;
}
如何填補空白,使我能寫(例如)builder.RegisterTwo().SingleInstance()
?是否有可能直接或間接地「聯合」兩個對象,以便配置結果可以配置所有基礎註冊,還是有另一種方法可以執行此操作?
更一般地說:那裏是否有與Autofac內部結構一起工作的引子?
謝謝你的時間。
好問題...最好的我能想到的,如果?你想保留基本的語法,就是實現'IRegistrationBuilder
Zoiks。好吧,我沒有結婚流利的語法。在我的情況下,我認爲只需使用一個採用'Action>'委託,然後在擴展方法內的註冊中應用所提供的委託的方法就足夠了。你在那看到的任何缺點?我是否違反任何Autofac語義?我可以想象在IRegistrationBuilder <...>的每種方法中重複這一點,但成本效益比現在對我來說沒有意義。如果它是Autofac的一部分,也許......這樣的實現是否會成爲核心的候選者? –
2012-01-09 19:16:00
@NicholasBlumhardt:Oh,BTW:'builder.RegisterType <>()'返回IRegistrationBuilder',因此兩個註冊的'LCD'是IRegistrationBuilder