首先,使用(旧的)扩展方法,例如
RegisterPerWcfRequest
不鼓励,因为新的
Lifestyle.Scoped
所有物
生活方式。范围
提供了一个更简单、更可读、更灵活的注册作用域实例的模型,同时使用了相同的底层生活方式,因为您通过
Options.DefaultScopedLifestyle
.
此外,由于对服务的每个WCF调用都在自己的请求中运行,因此存在一个新的作用域,每个服务都将获得自己的实例
Service2
,无论您是否将其注册为
Transient
或
Scoped
。仅当您将其注册为
Singleton
您将看到相同的实例
服务2
在请求上重用;事实上
辛格尔顿
只有一个实例
服务2
在WCF服务的生命周期内。
这里真正的问题是,如果
WcfService1
或
WcfService2
依赖于直接或间接依赖于的其他类
服务2
同样,必须使用相同的
服务2
在该请求期间使用,或者可以有多个
服务2
在那一次请求中?如果可以使用多个实例,则可以将其注册为
转瞬即逝的
,否则为
范围界定
.
如果你想让你的组件拥有短暂的生活方式,下面的注册就可以做到。
container.Register<IService1, Service1>();
container.Register<IService2, Service2>();