我创建了一个空的Asp.Net MVC3项目,并使用了nuget install-package Ninject.MVC3
没有做任何其他事情(没有注册服务,甚至没有创建控制器)我运行应用程序.
项目在NinjectMVC3.cs的第22行中断,但有以下异常:
[InvalidOperationException:已经初始化!] Ninject.Web.Mvc.Bootstrapper.Initialize(Func`1 createKernelCallback)在c:\ Projects\Ninject\Maintenance2.2 \ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\Bootstrapper.cs>:58 Mvc.App_Start.NinjectMVC3.Start()在c:\ Projects\Events\Events\App_Start\NinjectMVC3.cs:22
[TargetInvocationException:调用目标抛出了异常.]
System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo方法,Object target,Object []参数,SignatureStruct&sig,MethodAttributes methodAttributes,RuntimeType typeOwner)+0
System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo)方法,Object target,Object [] arguments,Signature sig,MethodAttributes methodAttributes,RuntimeType typeOwner)+72
System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object [] parameters,CultureInfo culture,Boolean skipVisibilityChecks)+ 335
System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object [] parameters,CultureInfo culture)+28
System.Reflection.MethodBase.Invoke(Object obj,Object [] parameters)+19
WebActivator.BaseActivationMethodAttribute. InvokeMethod()+199 WebActivator.ActivationManager.RunActivationMethods()+330 WebActivator.ActivationManager.R unPreStartMethods()+27 WebActivator.ActivationManager.Run()+39
NinjectMVC3.cs中的行是:
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel); // <- this one right here...
}
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?我已经在其他项目中使用Ninject for MVC3而没有任何问题.我注意到Start()方法中的第二行没有包含在Ninject.MVC3的旧(周)包中,所以也许在最近的更新中还有其他东西被打破了?
请帮忙!
编辑以解决雷莫的回答
这是来自我的global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用Rick Strahl撰写本文的代码示例:http://www.west-wind.com/weblog/posts/324917.aspx来对WCF服务进行异步调用,这非常有用.
我的问题是这样的: 第一次调用WCF服务需要20ms左右,而下一次需要大约1秒20ms(完全相同并接收完全相同的数据).如果我重复这个过程,结果总是一样的.每隔一个电话比第一个电话要长一秒钟.
我已经尝试在我的服务上设置InstanceContextMode:
[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.PerSession)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public abstract class AjaxPostBack : IAjaxPostBack
Run Code Online (Sandbox Code Playgroud)
我还在服务中调用的方法中设置了计时器,结果每次都是相同的(当然有些ms差异,但没什么重要的)
"JSON_Took":"00:00:00.0012939","Set_took":"00:00:00.0000274"
Run Code Online (Sandbox Code Playgroud)
(这些值--JSON_Took和Set_took - 是代码隐藏方法中的计时器.所以不是来自客户端 - 服务器 - 客户端的总时间.这只是为了说明实际代码耗费时间不是问题)
有任何想法吗?
如果您需要更多信息,请与我们联系.
---- 有趣的更新 ----
我下载了IE9 RC和Firefox(我一直在Chrome中测试)我的结果来自不同的浏览器:
Firefox:所有呼叫在大约1秒20ms到1s 30ms内保持一致
Chrome:其他所有通话都以Firefox的速度发出,其余的则以1秒的速度快速启动
IE9:几乎没有任何时间所有呼叫都是一致的(~20ms)
Opera:与IE9差不多(约30ms)
这是一个webkit问题吗?(我使用$ .ajax来调用WCF)
我正在构建一个最终将包含大量图像的Web应用程序.这些图像需要在整个站点以不同的格式显示.这两种解决方案的优缺点是什么:
你怎么看?
编辑: 我很难接受另一个答案,所以对于读这个q/a的人来说,花点时间阅读这两个答案,因为接受的答案是通过硬币的选择来选择的:)他们都是平等的好.
我有一个WCF服务,其中的方法很多如下.现在,我知道<summary>信息没有公开,但我如何才能公开这些信息,以便消费者获得intellisense中的信息?
/// <summary>
/// Obtains a list of agreements for a given dealer
/// </summary>
/// <param name="query">Object identifying the dealer<see cref="AgreementListRequest"/></param>
/// <returns>Object containing a list of all agreements for the provided dealer<see cref="AgreementListResponse"/></returns>
[OperationContract]
[FaultContract(typeof(DatabaseFault))]
[FaultContract(typeof(ServiceAgentFault))]
AgreementListResponse GetAgreements(AgreementListRequest request);
Run Code Online (Sandbox Code Playgroud) 您如何将Get-logic放入ViewModel的getter中?就像是:
public class DummyViewModel
{
public int Id { get; set; }
private DummyObject myObject;
public DummyObject MyObject
{
get
{
if (MyObject == null)
{
DummyRepository repo = new DummyRepository();
myObject = repo.Get(Id);
}
return myObject;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是不好的做法,还是完全没问题?通过在那里完成所有的get-logic,我发现我的控制器变得非常臃肿,但我真的很沮丧,我应该把它放在哪里......
我这样做的原因是我可以将ViewModel传递给不同类型的视图,并且只根据请求的属性执行必要的DB查找.
我试图在调用该方法的解决方案中找到所有位置IBus.Publish<T>(来自 NServiceBus)。到目前为止,这是有效的:
IMethodSymbol method = ... [IBus.Publish methodsymbol resolved];
var callers = method.FindCallers(solution, new CancellationToken());
Run Code Online (Sandbox Code Playgroud)
这导致 aIEnumerable<SymbolCallerInfo>并且我得到了对该方法的所有正确引用。
我现在将如何去IBus.Publish调用泛型参数?我是否必须手动解析源树,或者它是否存在一些我可以利用的 Roslyn 魔法?
例子:
在我的代码中,我有:
IBus _bus;
_bus.Publish<IMyMessage>(msg => { msg.Text = "Hello world"});
Run Code Online (Sandbox Code Playgroud)
我有兴趣获得IMyMessage类型。
非常感谢您的帮助!
c# ×5
wcf ×2
.net ×1
asp.net-mvc ×1
asynchronous ×1
generics ×1
image ×1
intellisense ×1
jquery ×1
ninject ×1
performance ×1
roslyn ×1
web ×1