为了账号安全,请及时绑定邮箱和手机立即绑定

温莎城堡是否有一个命名约定来自动判断生活方式?

温莎城堡是否有一个命名约定来自动判断生活方式?

C#
慕田峪9158850 2022-07-23 16:19:00
虽然这个问题看起来有点奇怪。我仍然在碰巧加入一个新项目。该项目大量使用温莎城堡 IoC。初始化后检查容器告诉我一些实现已注册为其他实现,LifeStyle.Transient而其他实现已注册LifeStyle.Singleton。他们的自定义引导代码搜索程序集并进行基于约定的注册,但没有提及生活方式。那么注册组件在生活方式上有何不同呢?温莎城堡有一些神奇的命名约定吗?例如:一对IFooManagerandFooManager将成为单身人士,而IFooandFoo将获得短暂的生活方式....(仅归功于 *Manager)。正如评论所要求的那样,这是在所有 /somehow enumerated/ 程序集上循环执行的核心注册:                    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))));
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

要按要求回答您的问题(因为可以回答)-不,温莎城堡没有神奇的命名约定来暗示生活方式。



查看完整回答
反对 回复 2022-07-23
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

处理这个问题的最佳方法是将您的注册划分为安装程序,并按照约定使用注册来显式注册某些具有所需配置的组件组。

例如:

container.Register(Classes.FromThisAssembly()
    .InSameNamespaceAs<FooManager>()
    .WithService.DefaultInterfaces()
    .LifestyleTransient());

这样一来,正在发生的事情就很明确了。


查看完整回答
反对 回复 2022-07-23
?
阿晨1998

TA贡献2037条经验 获得超6个赞

所以,我终于遇到了一个解释这种行为的地方。


所以回答:不,温莎城堡没有自动的生活方式推断逻辑。


我的原因是:


他们确实使用了这些温莎城堡属性,人们可以将这些属性传播到实现(组件)中来说明他们的生活方式:


/// <summary>

/// Message Box factory.

/// </summary>

[Singleton]

public class MessageBoxFact : IMessageBoxFact

{

或者


[Transient]


查看完整回答
反对 回复 2022-07-23
  • 3 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信