小编Sim*_*one的帖子

在每个控制器操作之前/之后执行代码

我有一个ASP.NET MVC应用程序,我想记录事件.我已经有了一个包含我需要的所有工具的Log类,但我必须实例化并明确地关闭它(因为它打开文件,所以我不能依赖GC).我的行为如下:

public ActionResult MainMenu()
{
    CreateLog();

    // Do controller stuff
    Log(message);
    // Do more controller stuff

    CloseLog();
    return View(mModel);
}
Run Code Online (Sandbox Code Playgroud)

或者我可以使用一个using块,但它只是一点点侵入性,它会产生异常处理的麻烦.我已经阅读过ActionFilters,我可以使用它创建和关闭我的日志,但后来我无法访问方法内的Log对象.

你有什么建议吗?我怎么能避免重复代码?

c# asp.net asp.net-mvc

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

React JSS 和 TypeScript

我已经使用 React 一段时间了,现在我想切换到使用 React 和 TypeScript。然而,我已经习惯了 JSS 样式(通过react-jss包),并且我不明白应该如何将它们与 TypeScript 一起使用。我还使用该classnames包有条件地分配多个类名,并且为此收到 TypeSCript 错误。

这是我的 React 组件模板:

import React, { Component } from 'react';
import withStyles from 'react-jss';
import classNames from 'classnames';

const styles = theme => ({
});

class MyClass extends Component {
    render() {
        const { classes, className } = this.props;
        return (
            <div className={classNames({ [classes.root]: true, [className]: className})}>
            </div>
        );
    }
};

export default withStyles(styles)(MyClass);
Run Code Online (Sandbox Code Playgroud)

我刚刚学习 TypeScript,所以我不确定我是否理解我遇到的错误。我如何在 TypeScript 中编写类似上面的内容?

更新

这是我最终转换模板的方法:

import React from 'react'; …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs jss

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

如何使用布尔列强制执行"唯一性"(有点像单选按钮)?

我有一张描述多对一关系的表,比如图片和专辑之间的关系.我希望能够为每张专辑选择一张也只有一张图片作为专辑的封面图片.现在,表格是这样的:

AlbumID int primary key,
PictureID int,
IsCover bool
Run Code Online (Sandbox Code Playgroud)

假设我不想更改整体架构(解决方案可能是将"覆盖"关系移动到另一个表,定义一对一关系,但最好不要更改已实现的查询通过添加另一个表),有没有办法强制所有具有相同AlbumID BUT ONE的条目将IsCover设置为false?

我正在寻找服务器端解决方案.我正在使用Microsoft SQL Server 2012.此处不能应用UNIQUE约束,否则我只能为每个专辑提供封面和非封面.我已经在我的应用程序中实现了检查,但我真的希望有一个额外的安全层.

提前致谢.

sql sql-server boolean unique

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

如果未找到行,JOIN 条件中的回退值

前言:我担心我要求做的事情无法实现。但我知道,如果有办法做到这一点,这里就会有人知道:)

假设我有一个 MySQL 数据库(或者 MariaDB 数据库,如果可以保留兼容性)。我需要根据具有特定值X的特定列从TableA中选择并连接TableB;TableB 中可能不存在合适的行,这意味着我将使用 LEFT OUTER JOIN。但是,如果没有找到行(TableB 中没有行在该列中具有值 X),那么我希望使用 TableB 中具有值 Y 的行。换句话说,Y 应该充当 JOIN 的后备条件。

这是我的具体例子。假设我通过在两个表之间拆分实体(例如产品)来处理数据本地化,一个包含可本地化数据,另一个包含固定数据。当我想获取法语产品信息时,如果没有法语信息,我希望回退到英语。但是,如果我这样做

// basic stub of the query for demonstration purposes
SELECT * FROM Products p
LEFT OUTER JOIN ProductsLocalization pLoc
      ON pLoc.ProductID = p.ID AND pLoc.Culture = 'fr-FR'
Run Code Online (Sandbox Code Playgroud)

当没有可用的法语信息时,我将得到NULL 。相反,仅对于那些行,我希望获得查询结果

// basic stub of the query for demonstration purposes
SELECT * FROM Products p
LEFT OUTER JOIN ProductsLocalization pLoc
      ON pLoc.ProductID = p.ID AND pLoc.Culture = 'en-US'
Run Code Online (Sandbox Code Playgroud)

但后一个查询当然是不可接受的。 …

mysql mariadb

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

如何获取实例化泛型的参数类型?

我很震惊我没有在互联网上找到任何关于这个问题的东西,但可能我正在找错字.这是我需要做的.

假设我有一个通用类型:List<string>为简单起见.如何获取参数类型(在本例中typeof(string))?

请记住,我需要在泛型类之外执行此操作(不在类方法中,这是我在其他SO问题中看到的).底线是我有一个泛型类型的实例,我需要知道它的类型和它的参数类型(在上面的例子中,我想得到两个typeof(List)AND typeof(string),而不是任何东西typeof(List<string>)).当然,这必须在运行时完成.

感谢所有回复的人.

c# generics reflection

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

C#中的基类...可以像接口一样继承吗?

我需要为许多类实现基本行为.举个例子,假设它是一种绘图行为:可以绘制许多不同类型的对象,它们都需要一些属性和一些通用代码来实现绘图过程.假设我将这个常见部分放在一个名为Drawable的类中.

问题是这些不同的类可能正在扩展其他类,所以我不能让它们继承自Drawable.显而易见的解决方案是使用接口(IDrawable),但是我无法在其中实现任何代码; 我能想到的另一个解决方案是使用组合,通过创建一个我所有类都可以实例化的DrawAction类,但这需要我在我需要制作的所有类中放入相同的代码(如果只是几行)绘制.

有人可以给我一些关于如何做的建议吗?谢谢.

c# inheritance design-patterns interface composition

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

单元测试 UrlHelper 扩展

我在 ASP.NET Core 项目中为 UrlHelper 编写了几个扩展方法。现在我想为他们编写单元测试。但是,我的许多扩展方法都利用了 UrlHelper 的方法(例如 Action),因此我需要将一个工作 UrlHelper 传递给参数this(或者一个工作 UrlHelper 来调用这些方法)。

如何实例化一个可用的 UrlHelper?我试过这个:

        Mock<HttpContext> mockHTTPContext = new Mock<HttpContext>();
        Microsoft.AspNetCore.Mvc.ActionContext actionContext = new Microsoft.AspNetCore.Mvc.ActionContext(
            new DefaultHttpContext(), 
            new RouteData(), 
            new ActionDescriptor());
        UrlHelper urlHelper = new UrlHelper(actionContext);

        Guid theGUID = Guid.NewGuid();

        Assert.AreEqual("/Admin/Users/Edit/" + theGUID.ToString(), UrlHelperExtensions.UserEditPage(urlHelper, theGUID));
Run Code Online (Sandbox Code Playgroud)

Test method Test.Commons.Admin.UrlHelperTests.URLGeneration threw exception: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index因以下调用堆栈而崩溃 ( ):

   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at …
Run Code Online (Sandbox Code Playgroud)

c# mstest asp.net-core

0
推荐指数
1
解决办法
1613
查看次数