小编J0H*_*0HN的帖子

Autofac,MVC(带ActionFilters),Web.Forms - 依赖解析冲突

我有一个遗留的Web.Forms应用程序,部分重写为MVC.MVC部分使用autofac作为依赖注入容器.

MVC部分定义了自定义过滤器:

public class CustomActionFilter : ActionFilterAttribute
{
    protected ILogger Logger { get; set; }
    public CustomActionFilter(ILogger logger) { Logger = logger; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Logger.Log("OnActionExecuting");
    }
}
Run Code Online (Sandbox Code Playgroud)

在web.config中禁用Web.Forms集成时,它可以正常工作.Hovewer,当我尝试使用Web.Forms autofac集成时,我得到了与AutofacFilterProviderautofac内部(堆栈跟踪)中某处相关的NullReferenceException .

注意,它CustomActionFilter被注册为全局过滤器,因此它在autofac中注册:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(DependencyResolver.Current.GetService<CustomActionFilter>());
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过了:

  1. 为MVC和Web.Forms使用单独的容器 - 相同的结果
  2. 使用属性注入而不是构造函数 - 相同的结果
  3. 在web.forms页面上显式触发依赖关系解析(像这样) - 工作

所以,问题是,有没有办法为MVC和web.forms部分提供幕后依赖解析.我是autofac的新手,对于一般的依赖注入容器来说有点新,所以我可能会错过一些明显的东西.

更新:错误与自定义 …

asp.net-mvc webforms autofac

6
推荐指数
1
解决办法
1253
查看次数

覆盖来自验证器的 http 状态代码

我有以下 DTO:

public class SomethingRequest {
     public string Code { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Code 必须是唯一的,所以我创建了一个验证器来检查是否已经有提供代码的记录,如下所示

public class SomethingValidator: AbstractValidator<SomethingRequest> 
{
    public SomethingValidator(ISomethingRepository repo) {
         RuleFor(something => something.Code).Must(BeUnique);
    }

    private bool BeUnique(string code) { ... uniqueness check... }
}
Run Code Online (Sandbox Code Playgroud)

当我使用验证功能时,验证器会自动连接到所有带有 的方法SomethingRequest,这真的很棒。

当条件失败时,我想返回409 ConflictHTTP 状态代码,但400 Bad Request总是返回。

所以,问题是:

  1. 我是否滥用了验证功能?(即自动装配的验证器并非设计用于应用程序逻辑检查)
  2. 如果不是,有什么方法可以覆盖400 BadRequest验证器的状态代码吗?

c# http-status-codes fluentvalidation servicestack

6
推荐指数
1
解决办法
2020
查看次数

高度为100%且溢出的元素

我基本上需要实现的是有一个元素(div,span,table,等等)消耗100%的'父高度',如果内容更高则显示滚动.

问题是,只有奇怪的铬和IE可以正常工作height:100%; overflow: auto;.标准中的Firefox,Opera和IE(任何IE 7+,任何"标准")都会忽略溢出并将html元素拉伸到父级大小以下.如果我设置固定高度它可以工作,但我无法确定渲染前的可用高度,有多个可能的值.

简化示例(jsFiddle为此):

<body>
    <div id="parent">
        <table id='container'>
            <tr>
                <td>
                    <div id='element-in-question'>
                        <!--Content long enough to stretch the div-->
                    </div>
                </td>
            </tr>
            <tr>
            <td id='footer-cell'>
                <div id='footer'>I'm footer<div>
            </td>
            </tr>
        </table>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

CSS:

#parent { height:500px; width:500px; position:absolute; }
#container { height: 100%; width:100%; }
#element-in-question { height:100%; width:100%; overflow: auto; }
#footer-cell { height:30px;}
#footer { height: 30px; }
Run Code Online (Sandbox Code Playgroud)

在真正的应用程序中,所有这些东西都在iframe中运行,表用于呈现页眉和页脚等等.请不要建议停止使用表格,它是100多个需要注意的地方的遗留应用程序.CSS唯一的解决方案将是理想的.

还有一点:它应该适用于Chrome,IE10标准模式.不支持FF,Opera和Safari,IE9及以下版本的处理方式不同.

更新:大约有十个不同高度的页脚,理想情况下解决方案不应该依赖于固定的页脚高度.

html css overflow

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

类型提示类尚未导入

我有以下代码:

def render(self, notification):
    """
    @type notification: Notification
    """
    return NotificationRepresentation(notification).to_dict()
    # some irrelevant code
Run Code Online (Sandbox Code Playgroud)

notification是一个Notification类实例.Notificationclass不在这里导入,PyCharm不能使用那种类型hinting(inferred type: unknown).

我尝试过使用全班名,但是没用.显而易见的方法是导入类,但它从未使用过,因此它将是一个冗余导入(PyCharm将在提交之前优化导入时删除它).不太明显的方法是做一些奇怪的事情Celery.task:

STATICA_HACK = True
globals()['kcah_acitats'[::-1].upper()] = False
if STATICA_HACK:
    # This is never executed, but tricks static analyzers (PyDev, PyCharm,
    # pylint, etc.) into knowing the types of these symbols, and what
    # they contain.
    from celery.canvas import group, chord, subtask
    from .base import BaseTask, Task, PeriodicTask, task, periodic_task
    from .sets import TaskSet …
Run Code Online (Sandbox Code Playgroud)

python type-hinting pycharm

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

如何抑制Joomla的JUser :: _ load:无法加载带有id错误信息的用户?

我有一个Joomla 1.6安装,可以在两个数据库上运行:joomla的数据库和特定于域的数据库,两者都在同一个MySQL服务器上.特定于域的数据库中的某些实体保留其所有权链接,即存储创建它的Joomla用户的user_id.有些链接不一致,并指向不存在的Joomla用户,从域模型的角度来看是正常的.问题是当我尝试获取它显示的用户名时

JUser::_load:Unable to load user with id 1
Run Code Online (Sandbox Code Playgroud)

由于可以有这样的链接,我需要压制这些消息.检索用户名的确切代码如下:

$user_id = $ticket->getUserId();
$user =& JFactory::getUser($user_id);
Run Code Online (Sandbox Code Playgroud)

Wrappig这段代码ob_start() ... ob_end_clean()并没有帮助.当然,我可以通过黑客攻击Joomla的内部来做到这一点,但有没有更清洁的解决方案?我是Joomla的新手,所以也许管理员面板中有一些选项来压制这些消息?

更新:设置display_errors => off,html_errors => off,display_startup_errors => off noes没有帮助.使用@的PHP错误抑制$user =@ JFactory::getUser($user_id)也没有用.

php joomla joomla1.6

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

处理CodeIgniter中的数据库错误

执行数据库查询时出现以下错误:

Error Number: 1062

Duplicate entry '1' for key 1

INSERT INTO `message_template` (`id`, `name`, `subject`, `detail`, `type`,
                               `status`, `create_date`) 
VALUES (1, 'adaa', '', 'dss', 'SMS', 'Active', '2011-08-25 19:34:08')

Filename: C:\AppServ\www\ci\system\database\DB_driver.php

Line Number: 330
Run Code Online (Sandbox Code Playgroud)

如何获取错误号码(例如1062)到handlle错误?

谢谢

php sql error-handling codeigniter

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

删除集合中的重复值

我有一些List<long>长期的myIds.我正在使用id填充集合.但是,我想要删除的集合中有一些重复项.

我试过distinct()在集合上使用但没有效果.重新排序和distinct()再次申请也没有帮助.

在不编写自定义逻辑的情况下删除这些重复项的最佳方法是什么?

我试过这个:

mydIds.OrderBy(x => x).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

c# collections lambda

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

整数除法

我面临以下面试问题.

考虑这个函数声明:

void quiz(int i)
{
    if (i > 1)
    {
        quiz(i / 2);
        quiz(i / 2);
    }
    writeOutput("*");
}
Run Code Online (Sandbox Code Playgroud)

函数调用打印了多少个星号quiz(5)

我的回答是:

具有整数除法结果类型的语言(Javascript,PHP等)是float - 七个星号.函数测验被调用:

  1. i = 5 - 一次,星号印刷.
  2. i = 2.5 - 两次,打印星号.
  3. i = 1.25 - 四次,打印星号.
  4. i = 0.625 - 八次,没有打印星号

分割结果类型名称为整数的语言(C/C++,C#,Java等) - 三个星号.函数测验被调用:

  1. i = 5 - 一次,星号印刷.
  2. i = 2 - 两次,打印星号.
  3. i = 1 - 四次,星号未打印.

问题语法类似于C/C++,Java,所以答案是三个

采访是a closed book exam- 在采访中我无法运行此代码并进行检查.面试官告诉我,我的回答并不完全正确(或者至少,他们没想到会这样).Hovewer,我在家里运行了这段代码(使用PHP,Javascript和C#),结果就像我描述的那样.

那么,是否有一些我不知道的警告或者我的答案比他们期望的更详细?

pseudocode

2
推荐指数
2
解决办法
3355
查看次数

为多个接口注册相同的实现

我有一个实现多个接口的类

public class AwesomeThingClass: IAwesome<Thing>, IAwesomeThing {
    // parameterized constructor, so can't use RegisterAutowiredAs
    public AwesomeThingClass(IClient client, string connectionString) {} 
}
Run Code Online (Sandbox Code Playgroud)

它通过使用信号量封装了基数有限的多线程操作(我的意思是,只允许 N 个这样的操作同时运行)。

但是,如果我使用类似的东西向 IoC 注册它

container.Register<IAwesome<Thing>>(cont => new AwesomeThingClass(cont.Resolve<IClient>(), connStr))
container.Register<IAwesomeThing>(cont => new AwesomeThingClass(cont.Resolve<IClient>(), connStr))
Run Code Online (Sandbox Code Playgroud)

我最终得到了两个可以使用IAwesome<Thing>and解决的实例IAwesomeThing,它允许运行 2*N 操作。我绝对需要为两个接口解析相同的实例。除了手动实例化类和注册实例之外,还有什么方法可以实现这一点吗?

这个问题本质上类似于Register the same type to multiple links,但它并不是重复的,因为我正在使用 ServiceStack IoC 容器(Func在撰写本文时),而该问题是关于Unity

c# inversion-of-control servicestack

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

Symfony - 向表中添加一列而不会丢失已生成的类

如何在不覆盖已生成的类的情况下向Database表中添加列?(学说)我需要编辑哪些文件?

如果我只是在数据库中添加列,我就不能使用Doctrine ORM的set和get函数.

doctrine symfony1 symfony-1.4 doctrine-1.2

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