gpt4 book ai didi

caSTLe-windsor - 让 CaSTLe Windsor 根据请求者类型命名空间选择组件

转载 作者:行者123 更新时间:2023-12-04 06:43:23 25 4
gpt4 key购买 nike

我有一个接口(interface) ISession,其实例由不同的 session 工厂生成,具体取决于类所属的命名空间。

我的组件注册示例:

IWindsorContainer container = new WindsorContainer();

container.Register(Component.For<NHibernate.ISession>()
.UsingFactoryMethod((kernel, creationContext) =>
{
NHibernate.ISession session =
new SessionFactoryForNamespace1()
.Instance.GetSession();

return session;
})
.LifestylePerWebRequest());

container.Register(Component.For<NHibernate.ISession>()
.UsingFactoryMethod((kernel, creationContext) =>
{
NHibernate.ISession session =
new SessionFactoryForNamespace2()
.Instance.GetSession();

return session;
})
.LifestylePerWebRequest());

container.Register(Component.For<Namespace1.IRepository1()
.ImplementedBy<Namespace1.Repository1>());

container.Register(Component.For<Namespace2.IRepository2>()
.ImplementedBy<Namespace2.Repository2>());

分辨率图示例:

public class MyController
{
public MyController(Namespace1.IRepository1 repo1,
Namespace2.IRepository2 repo2) { }
}

namespace Namespace1
{
public interface IRepository1 { }
public class Repository1 : IRepository1
{
public Repository1(NHibernate.ISession session) { }
}
}

namespace Namespace2
{
public interface IRepository2 { }
public class Repository2 : IRepository2
{
public Repository2(NHibernate.ISession session) { }
}
}

当 CaSTLe Windsor 被要求解析 MyController 时,它会尝试解析 IRepository1 和 IRepository2,然后分别解析 ISession。我想让 CaSTLe Windsor 根据请求者类型的命名空间选择组件处理程序,在我的示例中是 Namespace1 或 Namespace2。

我是 CaSTLe Windsor 的新手,不确定我应该插入解析管道中的哪个位置。

完成上述内容的最佳方法是什么?

最佳答案

我认为 service override会为此工作。

更新:

我也做了一个article on some of Windsor's advanced features (包括关于服务覆盖的部分)应该补充上面链接的文档。

关于caSTLe-windsor - 让 CaSTLe Windsor 根据请求者类型命名空间选择组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8384053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com