首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定Nhibernate.Burrow的ISession

绑定Nhibernate.Burrow的ISession
EN

Stack Overflow用户
提问于 2010-08-07 02:44:33
回答 2查看 860关注 0票数 1

我正在尝试使用NHibenate,Burrow和Ninject。

我似乎不能使用一个对象来绑定洞穴ISession。

我目前有

代码语言:javascript
复制
Bind<ISession>().ToProvider( new BurrowFramework().GetSession()).InRequestScope();  

我得到了错误

代码语言:javascript
复制
cannot convert from 'NHibernate.ISession' to 'System.Type'  

The best overloaded method match for 'Ninject.Syntax.IBindingToSyntax<NHibernate.ISession>.ToProvider(System.Type)' has some invalid arguments

我哪里错了?

EN

回答 2

Stack Overflow用户

发布于 2010-08-09 19:45:26

您可能想要执行以下操作:

代码语言:javascript
复制
Bind<ISession>().ToMethod( () => new BurrowFramework().GetSession()).InRequestScope();  

看一看Ninject文档- ToProvider指的是Ninject提供程序强制要求的特定接口,它允许您干净地管理更复杂的工厂(而不是像上面那样几乎作为内联工厂方法工作的东西)。

编辑:我把你的评论理解为你试过了,但我发现我搞砸了,因为我假设有一个重载的ToMethod,其中的委托没有参数,委托语法中的细微差别会让你感到困惑。如果不是这样,我应该这样写:

代码语言:javascript
复制
Bind<ISession>().ToMethod( ctx => new BurrowFramework().GetSession()).InRequestScope();  

现在,快速总结一下C#语法:

在C# 2中,我们有匿名委托,如下所示:

代码语言:javascript
复制
0) ToMethod( delegate {})...
1) ToMethod( delegate() {})...
2) ToMethod( delegate(x) {})...
3) ToMethod( delegate(X x) {})...
4) ToMethod( delegate(x, y) {})...
5) ToMethod( delegate(X x, Y y) {})...

在C# 3中,我们可以创建lambdas,如下所示:

代码语言:javascript
复制
1) ToMethod( () => {})...
2) Method( name => {})...
3) ToMethod( (X x) => {})...
4) ToMethod( (x, y) => {})...
5) ToMethod( (X x, Y y) => {})...

它们分别匹配零、任意类型的1、任意类型的1、任意类型的2、X后跟Y

它们都是等价的-编译器为它们生成相同的输出。

不同之处在于lambda语法中没有语法0的等价物。

我强烈推荐Jon Skeet的C#,它能让所有这些东西变得清晰(但等着看第二版吧,离第二版还有几个月的时间)

(如果有时间给出更深入的答案,可以查看一下Ninject源代码/API,看看它们是否总是一致,或者永远不会传递上下文)

票数 2
EN

Stack Overflow用户

发布于 2010-08-09 21:57:47

谢谢鲁本

你能给我澄清一下吗?

代码语言:javascript
复制
Bind<ISession>().ToMethod(delegate { return new BurrowFramework().GetSession(); }).InRequestScope();

代码语言:javascript
复制
Bind<ISession>().ToMethod(arg => new BurrowFramework().GetSession()).InRequestScope();

代码语言:javascript
复制
Bind<ISession>().ToMethod((IContext arg) => new BurrowFramework().GetSession()).InRequestScope();

我本以为第一个应该是这样的

代码语言:javascript
复制
(delegate(IContext arg){ return new BurrowFramework().GetSession();}

但它似乎起作用了,而这个不起作用。

代码语言:javascript
复制
Bind<ISession>().ToMethod( () => new BurrowFramework().GetSession()).InRequestScope();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3426758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档