我似乎无法按惯例注册我的温莎城堡对象,我真的很茫然。情况是我有两个项目,网站(一个非常基本的Web表单项目)和BusinessObjects(一个类库)。我正在尝试使用IoC来保持我的所有业务对象实现内部,并且只处理网站项目中的接口。
我发现完成此任务的最佳方法是使用安装程序。所以,在我的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
最终,类注册将更改为其他人继承的另一个界面,但一次只能一步。
任何有关正在发生的事情/我做错事的任何帮助都将不胜感激。
答案 0 :(得分:1)
您没有指定由您的类注册的任何服务,因此默认情况下,这些类被注册为自己的服务。来自文档:
您必须指定组件注册的服务;您可以使用WithService
属性或快捷键功能(WithServiceBase()
,WithServiceDefaultInterfaces()
等)来执行此操作。链接的资源包含您可以使用的不同选择方法:
Krzysztof Kozmic建议您使用基本服务注册您的组件,您可以这样做:
container.Register(Classes
.FromThisAssembly()
.BasedOn<IThingey>()
.WithServiceBase()
.LifestyleTransient()
);