我今天遇到了一些代码,这让我有些困惑。我有一堂课叫操作员。帮助我了解该类的构造函数中发生了什么。我不明白为什么它具有UsedImplicity属性,并且不知道“ this(r => {})”的作用。
public class Operator
{
[NotNull] readonly IUnityContainer _container;
[NotNull] readonly ServerWrapper _server;
[UsedImplicitly]
public Operator()
: this(r => { })
{
}
UPDATE-其他构造函数:
public Operator([NotNull] Action<IUnityContainer> register)
{
_container = new UnityContainer()
.RegisterType<ISettingsReader, MessageBusSettingsReader>(
new ContainerControlledLifetimeManager())
.RegisterType<IImpersonationStrategyFactory, ImpersonationStrategyFactory>();
register(_container);
_operator= new OperatorWrapper(_container.Resolve<ISettingsReader>());
}
答案 0 :(得分:4)
构造函数提供了一种回调机制:在实例化Operator
时,作为调用方的您可以传入带有Action<IUnityContainer>
签名的方法指针(无论是否为lambda),即为{{1 }}或void Callback(IUnityContainer c)
。
默认构造函数,即不带参数的构造函数,将构造函数与一个空的方法主体链接在一起,它基本上会忽略(丢弃)容器回调。这样做是因为它需要在第二个构造函数中执行初始化代码,但是如果没有其必需的参数就无法调用它。
第二个子问题:c => { do_something_with_c(c); }
是为了避免警告,因为从未引用过某个符号,而是打算将其用于反射或从外部调用,因此here已有详细记录。