在 Castle Windsor 中这相当于什么?
What is the equivalent for this in Castle Windsor?
假设我有例如:
public interface IYetAnotherInterface : IMyBaseInterface
public class JustAClass: IYetAnotherInterface
使用 Unity DI 容器这是有效的:
container.RegisterType<IMyBaseInterface, IYetAnotherInterface>();
container.RegisterType<IYetAnotherInterface, JustAClass>();
如何使用 Castle Windsor 执行此操作?这失败了:
container.Register(
Component
.For<IMyBaseInterface>()
.ImplementedBy<IYetAnotherInterface >());
container.Register(
Component
.For<IYetAnotherInterface >()
.ImplementedBy<JustAClass>());
我正在尝试解析构造函数中的 IYetAnotherInterface,例如
public Foo(IYetAnotherInterface i, ...)
container.Register(
Component
.For<IMyBaseInterface>()
.ImplementedBy<JustAClass>());
container.Register(
Component
.For<IYetAnotherInterface >()
.ImplementedBy<JustAClass>());
实际上,对于您给定的场景(依赖于 IYetAnotherInterface
的 ctor),只需第二次注册就足够了。
我不确定 container.RegisterType<Interface1, Interface2>();
在 Unity 中的作用。看起来它连接了一个组件以解决另一个组件?
如果是这样,您有两个选择。
如果您想拥有两个组件,请按照@vzwick 的回答进行操作。
如果你只想要一个组件,请使用以下内容。
.
Component
.For<IMyBaseInterface, IYetAnotherInterface>()
.ImplementedBy<JustAClass>()
因此,在第一个选项中,您最终会得到两个独立的组件,都由 JustAClass
支持,每个组件都暴露一个 service 接口:一个用于 IMyBaseInterface
另一个是 IYetAnotherInterface
.
在第二个选项中,您最终得到一个组件,同时公开 IMyBaseInterface
和 IYetAnotherInterface
。
The documentation 对概念的解释非常好,我强烈建议您熟悉它。
假设我有例如:
public interface IYetAnotherInterface : IMyBaseInterface
public class JustAClass: IYetAnotherInterface
使用 Unity DI 容器这是有效的:
container.RegisterType<IMyBaseInterface, IYetAnotherInterface>();
container.RegisterType<IYetAnotherInterface, JustAClass>();
如何使用 Castle Windsor 执行此操作?这失败了:
container.Register(
Component
.For<IMyBaseInterface>()
.ImplementedBy<IYetAnotherInterface >());
container.Register(
Component
.For<IYetAnotherInterface >()
.ImplementedBy<JustAClass>());
我正在尝试解析构造函数中的 IYetAnotherInterface,例如
public Foo(IYetAnotherInterface i, ...)
container.Register(
Component
.For<IMyBaseInterface>()
.ImplementedBy<JustAClass>());
container.Register(
Component
.For<IYetAnotherInterface >()
.ImplementedBy<JustAClass>());
实际上,对于您给定的场景(依赖于 IYetAnotherInterface
的 ctor),只需第二次注册就足够了。
我不确定 container.RegisterType<Interface1, Interface2>();
在 Unity 中的作用。看起来它连接了一个组件以解决另一个组件?
如果是这样,您有两个选择。
如果您想拥有两个组件,请按照@vzwick 的回答进行操作。
如果你只想要一个组件,请使用以下内容。
.
Component
.For<IMyBaseInterface, IYetAnotherInterface>()
.ImplementedBy<JustAClass>()
因此,在第一个选项中,您最终会得到两个独立的组件,都由 JustAClass
支持,每个组件都暴露一个 service 接口:一个用于 IMyBaseInterface
另一个是 IYetAnotherInterface
.
在第二个选项中,您最终得到一个组件,同时公开 IMyBaseInterface
和 IYetAnotherInterface
。
The documentation 对概念的解释非常好,我强烈建议您熟悉它。