小编Eri*_*kel的帖子

Ninject.Web.MVC + MVC3抛出StackOverflowException

我有一个使用ASP.NET MVC3和Ninject.Web.MVC(MVC3版本)的简单Web应用程序.

整个过程正常,除非应用程序结束.每当它结束时,就会释放内核,如NinjectHttpApplication中的Application_End()所示:

反射器告诉我这个:

public void Application_End()
{
    lock (this)
    {
        if (kernel != null)
        {
            kernel.Dispose();
            kernel = null;
        }
        this.OnApplicationStopped();
    }
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是我的网络服务器出现了StackOverflowException(我在VS2010中尝试了IIS7和内置的web服务器).我只能假设这是出错的地方,因为我自己没有在应用程序端编写任何代码.

我发现内核知道如何解析IKernel(它返回内核本身),这可能会导致堆栈溢出吗?我可以想象会发生这样的事情:

  • Kernel.Dispose()
  • 处理内核中的所有实例
  • 嘿!看看这个,内核也在内核中.返回第1步.

换句话说,内核被释放,处理它所拥有的所有引用(包括自引用),这会导致它自行处理.

这有意义吗?

编辑:

似乎问题出在NinjectHttpApplication中.看看这个激活码:

    public void Application_Start()
    {
        lock (this)
        {
            kernel = this.CreateKernel();
            ...
            kernel.Bind<IResolutionRoot>().ToConstant(kernel).InSingletonScope();
            ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

看起来没问题,但现在发生的事情是每当调用IResolutionRoot时,内核都会缓存在自身内部.在处置内核时,清空缓存会释放所有缓存的对象,从而导致循环引用.

NinjectHttpApplication的一个简单解决方案是简单地更改绑定.将常量绑定更改为方法一:

kernel.Bind<IResolutionRoot>().ToConstant(kernel).InSingletonScope();
Run Code Online (Sandbox Code Playgroud)

kernel.Bind<IResolutionRoot>().ToMethod(x => this.Kernel);
Run Code Online (Sandbox Code Playgroud)

这解决了问题,但我不确定整个循环处置缓存问题是否是ninject中的错误.

c# asp.net-mvc ninject asp.net-mvc-3

7
推荐指数
1
解决办法
1395
查看次数

场地集和传说

好吧,我知道HTML中的fieldset/ 是如何legend工作的.假设您有一个包含某些字段的表单:

<form>
    <fieldset>
        <legend>legend</legend>
        <input name="input1" />
    </fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)

我该怎么用legend?它被显示为标题,但在语义上不是传说内容的解释?在我看来,最好你做这样的事情:

<form>
    <fieldset>
        <legend>* = required</legend>
        <label for="input1">input 1 *</label><input id="input1" name="input1" />
    </fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)

但这并不能解决字段集的呈现方式.这只是HTML中的一个暧昧命名,还是我对英文单词'legend'的误解?


编辑:修正了一些错误;-)

html fieldset

5
推荐指数
1
解决办法
4495
查看次数

Kubernetes ConfigMaps 卷挂载问题

我无法使用多文件夹卷挂载来挂载配置映射。

我的结构volume-mount.yaml如下:

不起作用

apiVersion: v1
kind: Pod
metadata:
  name: test-web
spec:
  containers:
    - name: test-web
      image: docker.io/hello-world    
      volumeMounts:
      - name: config-volume
        mountPath: /usr/test
  volumes:
    - name: config-volume
      configMap:
        name: test-config-map
        items:
       - key: application.properties 
         path: test-web
       - key: test.xml
          path: test-web/configs/test_config
  restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)

错误

MountVolume.SetUp failed for volume "config-volume" : open /var/lib/kubelet/pods/93768c34-6dc6-11e8-9546-025000000001/volumes/kubernetes.io~configmap/config-volume/..2018_06_11_22_27_08.476420050/test-web: is a directory`
Run Code Online (Sandbox Code Playgroud)

作品

apiVersion: v1
kind: Pod
metadata:
  name: test-web
spec:
  containers:
    - name: test-web
      image: docker.io/hello-world    
      volumeMounts:
      - name: config-volume
        mountPath: /usr/test
  volumes: …
Run Code Online (Sandbox Code Playgroud)

mount docker kubernetes

5
推荐指数
1
解决办法
2万
查看次数

您将如何存储和查询营业时间?

我们正在构建一个应用程序,为各种业务存储"营业时间".表示此数据的最简单方法是什么,以便您可以轻松检查项目是否已打开?

一些选择:

  • 分割出可以标记为"打开/关闭"的块(每15分钟一次).检查涉及查看"打开"位是否设置了所需的时间(有点像火车时刻表).
  • 存储时间范围列表(上午11点至下午2点,下午5-7点等)并检查当前时间是否落在任何指定范围内(这是我们的大脑在解析上面的字符串时所做的事情).

有没有人有存储和查询时间表信息的经验和任何建议?

(有各种各样的疯狂角落案例,比如"关闭本月的第一个星期二",但我们会将其留下另一天).

language-agnostic time datetime time-management

4
推荐指数
1
解决办法
789
查看次数

缓存sessionfactory

至于我收集(读取:测量),到目前为止构建配置和sessionfactory需要花费大量时间使用nhibernate执行查询.是否有任何反对使sessionfactory静态,所以每个appDomain只配置一次?

我知道在使用这种方法时存在锁定和竞争问题,但我个人并不认为在sessionfactory上使用这种方法会破坏我的应用程序.

我问这个的原因是因为它很难测试可能的线程问题,因为它不会一直发生.

c# asp.net nhibernate caching

3
推荐指数
1
解决办法
844
查看次数