不能按惯例注册温莎城堡的组件
本文关键字:城堡 组件 不能按 按惯例 注册 不能 | 更新日期: 2023-09-27 17:50:57
我似乎不能按照惯例注册我的温莎城堡物品,我真的很困惑。情况是我有两个项目,网站(一个真正基本的web表单项目)和BusinessObjects(一个类库)。我正在尝试使用IoC来使我所有的业务对象实现保持在内部,并且只处理web项目中的接口。
我发现完成这个的最好方法是使用安装程序。因此,在global。asax。cs中,我有这个:
private IWindsorContainer _container;
public override void Init()
{
base.Init();
InitializeIoC();
Global.WindsorContainer = _container;
}
private void InitializeIoC()
{
_container = new WindsorContainer();
_container.Install(new BusinessObjectsInstaller());
}
public static IWindsorContainer WindsorContainer { get; private set; }
这似乎工作得很好,并将对象拉出容器,我只是使用一个非常简单的:
var thingey = Global.WindsorContainer.Resolve<IThingey>();
然后在我的BusinessObjects项目中,我有这个:
public class BusinessObjectsInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<IThingey>().ImplementedBy<Thingey>());
}
}
现在,在这一点上,一切都按照我的期望进行。它并不优雅,但我仍在努力掌握它。因此,在这一点上,我试图完成的一件大事是以更有用的方式将这些对象连接起来,这导致我将上面的组件注册替换为以下内容:
container.Register(Classes
.FromThisAssembly()
.BasedOn<IThingey>()
.LifestyleTransient()
);
我绝对不能去工作。我得到的只有
没有支持该服务的组件BusinessObjects.Contracts.IThingey was found
最终,类注册将被更改为其他接口继承的另一个接口,但是一次一步。
如果你能帮我弄清楚发生了什么/我做错了什么,我将不胜感激。
您没有指定任何由您的类注册的服务,因此在默认情况下,这些类被注册为它们自己的服务。来自文档:
默认情况下,组件的服务是类型本身
你必须指定组件是针对哪些服务注册的;您可以使用WithService
属性或快捷函数(WithServiceBase()
, WithServiceDefaultInterfaces()
等)来完成此操作。链接的资源包含您可以使用的不同选择方法:
- <
- 基地/gh>
- DefaultInterfaces
- FromInterface
- AllInterfaces 自我
- 选择
Krzysztof Kozmic建议您使用Base服务注册您的组件,您可以这样做:
container.Register(Classes
.FromThisAssembly()
.BasedOn<IThingey>()
.WithServiceBase()
.LifestyleTransient()
);