繁体   English   中英

无法按照惯例注册Castle Windsor组件

[英]Can't register Castle Windsor components by convention

我似乎无法按照惯例注册我的Castle Windsor对象,我真的很茫然。 情况是我有两个项目,网站(一个非常基本的Web表单项目)和BusinessObjects(一个类库)。 我正在尝试使用IoC来保持我的所有业务对象实现内部,并且只处理Website项目中的接口。

我发现完成此任务的最佳方法是使用安装程序。 所以,在我的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的组件

最终,类注册将更改为其他接口继承的另一个接口,但一次只能一步。

任何有关正在发生的事情/我做错了什么的帮助都将不胜感激。

您没有指定由您的类注册的任何服务,因此默认情况下,这些类被注册为自己的服务。 从文档:

默认情况下,组件的服务是类型本身

您必须指定组件注册的服务; 您可以使用WithService属性或快捷方式( WithServiceBase()WithServiceDefaultInterfaces()等)来实现。 链接的资源包含您可以使用的不同选择方法:

Krzysztof Kozmic建议您使用Base服务注册组件,您可以这样做:

container.Register(Classes
    .FromThisAssembly()
    .BasedOn<IThingey>()
    .WithServiceBase()
    .LifestyleTransient()
    );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM