我有两个对象应该一起注册,并且共享相同的生命周期范围。我想提供一个注册扩展来封装这个并保持注册的流畅性,但我需要一些帮助。下面就我在的情况:多注册的流利配置
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