温莎城堡是否有自动判断生活方式的命名约定?
Does Castle Windsor have a naming convention to judge lifestyle automagically?
虽然这个问题看起来有点奇怪。我仍然在碰巧加入的新项目中摸索。
该项目大量使用温莎城堡 IoC。初始化后检查容器告诉我,一些实现已注册为 LifeStyle.Transient
,其他实现已注册为 LifeStyle.Singleton
。他们的自定义引导代码搜索程序集并进行基于约定的注册,但只字未提 Lifestyle。那么注册组件在生活方式上有何不同?
温莎城堡有什么神奇的命名约定吗?
例如:IFooManager
和 FooManager
将成为单身人士,而 IFoo
和 Foo
将获得短暂的生活方式....(只是由于给*经理)。
正如评论所要求的那样,这是在所有/以某种方式枚举/程序集上循环执行的核心注册:
var assembly = Assembly.LoadFrom(fileName);
container.Register(Classes.FromAssembly(assembly).Pick()
.If(t => TypeIsInNamespaces(includeNamespaces, t) && GetInterfacesOfType(t, includeNamespaces).Any())
.WithService.Select((t, baseT) => GetInterfacesOfType(t, includeNamespaces)).Configure(c => c.Named(GetName(c.Implementation))));
按要求回答您的问题(因为它可以回答)- 不,温莎城堡的神奇命名约定无法暗示生活方式。
处理该问题的最佳方法是将您的注册划分为 Installers and use registration by convention,以明确注册具有所需配置的某些组件组。
例如:
container.Register(Classes.FromThisAssembly()
.InSameNamespaceAs<FooManager>()
.WithService.DefaultInterfaces()
.LifestyleTransient());
这样就可以清楚地知道发生了什么。
所以,我终于找到了一个解释行为的地方。
所以回答:不,温莎城堡没有自动推理生活方式的逻辑。
我的原因是:
他们确实使用这些 Windsor Castle attributes 可以散布在实现(组件)中来说明他们的生活方式:
/// <summary>
/// Message Box factory.
/// </summary>
[Singleton]
public class MessageBoxFact : IMessageBoxFact
{
或
[Transient]
虽然这个问题看起来有点奇怪。我仍然在碰巧加入的新项目中摸索。
该项目大量使用温莎城堡 IoC。初始化后检查容器告诉我,一些实现已注册为 LifeStyle.Transient
,其他实现已注册为 LifeStyle.Singleton
。他们的自定义引导代码搜索程序集并进行基于约定的注册,但只字未提 Lifestyle。那么注册组件在生活方式上有何不同?
温莎城堡有什么神奇的命名约定吗?
例如:IFooManager
和 FooManager
将成为单身人士,而 IFoo
和 Foo
将获得短暂的生活方式....(只是由于给*经理)。
正如评论所要求的那样,这是在所有/以某种方式枚举/程序集上循环执行的核心注册:
var assembly = Assembly.LoadFrom(fileName);
container.Register(Classes.FromAssembly(assembly).Pick()
.If(t => TypeIsInNamespaces(includeNamespaces, t) && GetInterfacesOfType(t, includeNamespaces).Any())
.WithService.Select((t, baseT) => GetInterfacesOfType(t, includeNamespaces)).Configure(c => c.Named(GetName(c.Implementation))));
按要求回答您的问题(因为它可以回答)- 不,温莎城堡的神奇命名约定无法暗示生活方式。
处理该问题的最佳方法是将您的注册划分为 Installers and use registration by convention,以明确注册具有所需配置的某些组件组。
例如:
container.Register(Classes.FromThisAssembly()
.InSameNamespaceAs<FooManager>()
.WithService.DefaultInterfaces()
.LifestyleTransient());
这样就可以清楚地知道发生了什么。
所以,我终于找到了一个解释行为的地方。
所以回答:不,温莎城堡没有自动推理生活方式的逻辑。
我的原因是:
他们确实使用这些 Windsor Castle attributes 可以散布在实现(组件)中来说明他们的生活方式:
/// <summary>
/// Message Box factory.
/// </summary>
[Singleton]
public class MessageBoxFact : IMessageBoxFact
{
或
[Transient]