使用 Castle Windsor fluent API 注册实现多个接口的组件
Using Castle Windsor fluent API to register components implementing multiple interfaces
我正在构建一个 POC 来演示我们是否可以在 WinForms 应用程序中使用 Castle Windsor 和 Model-View-Presenter 模式。
我的设计如下:
public interface IPresenter{...}
public interface IPresenterOne : IPresenter {...}
public interface IPresenterN : IPressenter {...}
public interface IView{...}
public interface IViewOne : IView {...}
public interface IViewN : IView {...}
我已经为演示者和视图创建了安装程序,如下所示:
public class PresentersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromAssemblyContaining(typeof(PresenterOne))
.BasedOn<IPresenter>()
.LifestyleSingleton());
}
}
public class FormsInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromAssemblyNamed("MyViews")
.BasedOn<IView>()
.LifestyleSingleton());
}
}
现在我想要的是能够做同样的事情,但是每个视图和每个演示者都被分别注册为 IView 和 IPresenter 以及它们的特定界面,即 PresenterOne class 注册为 IPresenter 和 IPresenterOne.
如何使用 Castle 的流畅 API 来完成此操作,而不必一一注册每个组件?
我正在使用 Visual Studio 2017 和 Castle Windsor 4.0。
谢谢。
经过多次谷歌搜索、阅读文档并尝试 API 中的每个选项后,我终于找到了答案:
public class FormsInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromAssemblyNamed("MyViews")
.BasedOn<IView>()
.WithServiceAllInterfaces()
.LifestyleSingleton());
}
}
我正在构建一个 POC 来演示我们是否可以在 WinForms 应用程序中使用 Castle Windsor 和 Model-View-Presenter 模式。
我的设计如下:
public interface IPresenter{...}
public interface IPresenterOne : IPresenter {...}
public interface IPresenterN : IPressenter {...}
public interface IView{...}
public interface IViewOne : IView {...}
public interface IViewN : IView {...}
我已经为演示者和视图创建了安装程序,如下所示:
public class PresentersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromAssemblyContaining(typeof(PresenterOne))
.BasedOn<IPresenter>()
.LifestyleSingleton());
}
}
public class FormsInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromAssemblyNamed("MyViews")
.BasedOn<IView>()
.LifestyleSingleton());
}
}
现在我想要的是能够做同样的事情,但是每个视图和每个演示者都被分别注册为 IView 和 IPresenter 以及它们的特定界面,即 PresenterOne class 注册为 IPresenter 和 IPresenterOne.
如何使用 Castle 的流畅 API 来完成此操作,而不必一一注册每个组件?
我正在使用 Visual Studio 2017 和 Castle Windsor 4.0。
谢谢。
经过多次谷歌搜索、阅读文档并尝试 API 中的每个选项后,我终于找到了答案:
public class FormsInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromAssemblyNamed("MyViews")
.BasedOn<IView>()
.WithServiceAllInterfaces()
.LifestyleSingleton());
}
}