小编Bon*_*nyT的帖子

使用Castle Windsor将依赖项注入CustomAttribute

在我的ASP.Net MVC应用程序中,我实现了一个Custom ActionFilter来授权用户.

我使用CastleWindsor为所有控制器提供依赖注入,如下所示:

  protected virtual IWindsorContainer InitializeServiceLocator()
    {
        IWindsorContainer container = new WindsorContainer();
        ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));

        container.RegisterControllers(typeof(HomeController).Assembly);
        ComponentRegistrar.AddComponentsTo(container);

        ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));

        return container;
    }
Run Code Online (Sandbox Code Playgroud)

在我的CustomAttribute中,我需要一个由我的所有控制器使用的依赖项,但是我无法在属性中使用基于构造函数的注入.

那么这里最干净的方法是什么?我该如何提供依赖?

c# asp.net-mvc dependency-injection castle-windsor action-filter

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

绝对定位性能

我有一位同事在他的CSS中使用了很多绝对定位.

我发现通常可以通过为html提供不同的结构来实现相同的视觉效果 - 实际上我倾向于避免使用绝对定位,除非我绝对需要.

问题 - 我的直觉在这里听起来除了css复杂性之外,是绝对定位要谨慎使用的东西吗?

css

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

SQL性能低下

我的查询如下;

 SELECT COUNT(Id) FROM Table
Run Code Online (Sandbox Code Playgroud)

该表包含3300万条记录 - 它包含Id上的主键,没有其他索引.

查询需要30秒.

实际执行计划显示它使用聚簇索引扫描.

我们已经分析了该表,发现它没有使用此链接中显示的第一个查询进行分段:http://sqlserverpedia.com/wiki/Index_Maintenance.

关于为什么这个查询如此缓慢以及如何解决它的任何想法.

表定义:

 CREATE TABLE [dbo].[DbConversation](
[ConversationID] [int] IDENTITY(1,1) NOT NULL,
[ConversationGroupID] [int] NOT NULL,
[InsideIP] [uniqueidentifier] NOT NULL,
[OutsideIP] [uniqueidentifier] NOT NULL,
[ServerPort] [int] NOT NULL,
[BytesOutbound] [bigint] NOT NULL,
[BytesInbound] [bigint] NOT NULL,
[ServerOutside] [bit] NOT NULL,
[LastFlowTime] [datetime] NOT NULL,
[LastClientPort] [int] NOT NULL,
[Protocol] [tinyint] NOT NULL,
[TypeOfService] [tinyint] NOT NULL,
  CONSTRAINT [PK_Conversation_1] PRIMARY KEY CLUSTERED 
 (
[ConversationID] ASC
 )WITH (PAD_INDEX  = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2005

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

阻止VBscript应用程序显示控制台窗口

我有一个VBScript应用程序,可以创建符号链接.

Set wshell = CreateObject("WScript.Shell")
.....
linkcmd = "mklink /D """ & linkFolderPath & "\" & linkName & """ """ & libfolder & "\" & folderName & """"
    cmd = "cmd /C " & linkcmd
    wshell.Run cmd, 4, true
Run Code Online (Sandbox Code Playgroud)

这很好并且有效,但是当我创建了很多链接时,每次执行wshell.Run命令都会导致出现一个瞬态控制台窗口并立即消失.

反正有没有阻止控制台窗口如此明显地创建?

vbscript

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

处理WCF服务错误的最佳做法?

我正在编写某种WCF服务.大多数异常都在BL实现中捕获并在那里处理.我的每个API的返回类型都是一个包含错误代码,错误消息和成功布尔值的类(命名为"结果").

处理异常时,此类会相应更新,最后会发送回客户端.一些例外是非正式的,未处理的.目前,我使用通用try-catch从服务层包装每个BL调用,因此我可以捕获每个未处理的异常并创建一个通用的"result"类,其中包含一般的失败消息,错误代码和success = false.

这是处理异常的好方法,还是应该让服务抛出未处理的异常给客户端?您可以假设客户端无法使用异常中的数据,因此不会从异常中包含的额外信息中受益.

c# wcf exception

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

jQuery - 你不能没有的功能

我昨晚和一位同事交谈,jQuery出现了 - 他从来没有遇到jTemplates或曾经考虑过可能存在的东西......

它让我思考 - jQuery中存在多少其他非常有用的功能,因为存在完全可维护的替代品而未被使用

我希望这个问题不会被关闭 - 我知道它不遵循现代Stack-Overflow QA范例,但我认为它可以形成一个有用的资源,这样的问题曾经是常见的,所以C#,javascript等有类似的产品.

我将从明显的开始:

  • 选择者需要我说更多?

  • 外观修改器 - 可以轻松应用于DOM元素的各种视觉效果.看到这里.

  • jQuery UIThemeRoller一起使用特别有用.还有许多小部件和交互.到目前为止,我只使用了DialogueSlider控件,两者都表现出色.看到这里.

  • .ajax和它的变种(.get(),. load()等) - 承担了制作ajax请求的所有痛苦.看到这里.

  • .live将事件处理程序附加到现在和将来与选择器匹配的所有元素!天才!看到这里.

  • jTemplates - 替代jQuery.tmpl()函数,这个插件允许您创建功能强大的html模板,用于呈现客户端数据.看这里.

  • qTip2 - 仍处于正式测试阶段,但这个插件只是创建工具提示的最佳选择.看到这里.

  • 延迟 - 管理异步代码的一种干净而明智的方法.请参阅此处获取基本信息和更多链接.

请添加我错过的任何内容,我会相应更新我的列表.

jquery jquery-plugins

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

使用组进行复杂的LINQ排序

我正在尝试根据以下(简化)规则对项目列表进行排序:

我将每个项目具有以下属性:

 Id (int), 
 ParentId (int?), 
 Name (string)
Run Code Online (Sandbox Code Playgroud)

ParentID是Id的自联接ForeignKey.如果项目具有ParentId,则父项也将存在于列表中.

我需要对列表进行排序,以便所有具有父项的项目立即显示在其父项之后.然后所有项目将按名称排序.

如果我有以下内容:

 Id: 1, ParentId: null, Name: Pi
 Id: 2, ParentId: null, Name: Gamma
 Id: 11, ParentId: 1, Name: Charlie
 Id: 12, ParentId: 1, Name: Beta
 Id: 21, ParentId: 2, Name: Alpha
 Id: 22, ParentId: 2, Name: Omega
Run Code Online (Sandbox Code Playgroud)

然后我希望它们排序如下:

Ids:2,21,22,1,12,11

目前,我能想到的最好的方法是首先按名称排序,然后按父母排序按如下方式排序:

var sortedItems = itemsToSort.OrderBy(x=> x.Name).GroupBy(x=> x.ParentId);
Run Code Online (Sandbox Code Playgroud)

我的起始计划如下:(在非功能代码中)

var finalCollection = new List<Item>

var parentGroup = sortedItems.Where(si => si.Key == null);

foreach(parent in parentGroup)
{
   finalCollection.Add(parent);
   foreach(child in sortedItems.Where(si => si.Key …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-objects

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

Knockout.js - xxxx不是一个函数

我正在尝试将Knockout.js合并到WebApplication中.

我基于我的大部分代码的教程都在这里.

基本上 - 我有一个项目列表 - 我希望能够单击一个项目并让相应的数据显示在页面底部的div中.最终我将使用jquery.UI Dialog插件将此div转换为弹出窗口,但是现在,我只是想让selectedItem工作.

我的(简化)代码在这里:http://jsfiddle.net/fZXAX/1/

我只是得到错误: actionListViewModel.selectedActionId不是一个函数.

我没有看到这个与以相同方式使用selectedMailId的教程之间的区别.我的代码和示例之间的唯一区别是我没有使用文字表示法.

任何人都可以看到我错在哪里?提前致谢.

javascript jquery knockout.js

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

Castle Windsor - 注入IActionInvoker实施问题

我想使用的方法从这个文章,但我失去了一些东西-我目前得到内WindsorControllerFactory.GetControllerInstance一个错误,当它试图解决IActionInvoker因为WindsorActionInvoker对IWindsorContainer的依赖.

鉴于WindsorControllerFactory已经有对IWindsorContainer的引用,我可以传入该引用吗?如果是这样 - 怎么样?我发现的唯一示例是将值类型作为构造函数参数传递,而不是引用类型.

我觉得我错过了一些明显的东西......

当前设置如下:在Global.asax Application_Start中我调用以下方法:

 protected virtual IWindsorContainer InitializeServiceLocator()
    {
        IWindsorContainer container = new WindsorContainer();
        ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));

        container.RegisterControllers(typeof(HomeController).Assembly);
        ComponentRegistrar.AddComponentsTo(container);

        return container;
    }
Run Code Online (Sandbox Code Playgroud)

ComponentRegistrar:

 public static void AddComponentsTo(IWindsorContainer container) 
 {
      //add other components.....

      container.AddComponentLifeStyle<IActionInvoker, WindsorActionInvoker>(LifestyleType.PerWebRequest);

 }
Run Code Online (Sandbox Code Playgroud)

WindsorActionInvoker:

public class WindsorActionInvoker : ControllerActionInvoker, IActionInvoker
{
    readonly IWindsorContainer container;

    public WindsorActionInvoker(IWindsorContainer container)
    {
        this.container = container;
    }

    protected override ActionExecutedContext InvokeActionMethodWithFilters(
            ControllerContext controllerContext,
            IList<IActionFilter> filters,
            ActionDescriptor actionDescriptor,
            IDictionary<string, object> parameters)
    {
        foreach (IActionFilter actionFilter in filters)
        {
            container.Kernel.InjectProperties(actionFilter);
        } …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection castle-windsor

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

Visual SVN还是另类?

我们目前正在考虑从TFS迁移到SVN.

我之前使用过基于Linux服务器的SVN,但是我们没有Linux机箱,也没有Linux技能,所以我们正在考虑使用VisualSVN Server.

主要问题是:

1)VisualSVN服务器:基础还是企业?我们是一个小团队,所以我认为Basic应该足够好.

2)Bugzilla集成 - 我之前发现这非常宝贵 - 将它与Visual SVN集成的任何问题?

还有更好的选择吗?

更新:

我发现这个网站提供了一些安装帮助 - 如果有更简单的选择,问题仍然存在.

svn tfs bugzilla visualsvn-server

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

ASP.Net MVC自定义身份验证

我有一个Asp.Net MVC webapplication坐在一个仍然主要由delphi管理的网站中.安全性目前由delphi管理,它创建cookie.

已经决定通过提取cookie详细信息并将它们传递给导入的Delphi DLL来验证ASP.Net应用程序中的用户,该DLL根据用户是否有效返回true或false.

我的计划是使用Forms身份验证,但不是将用户重定向到表单而是调用delphi包装器,如果成功,则将用户重定向到原始URL.这样做的好处是,当安全性迁移到.Net时,身份验证框架已经存在,只需要实现更改即可.

public ActionResult LogOn(SecurityCookies model, string returnUrl)
    {
        try
        {
            if (model != null)
            {
                Log.DebugFormat("User login: Id:{0}, Key:{1}", model.UserId, model.Key);
                if (authenticator.UserValid(model.UserId, model.Key, 0))
                {
                    FormsService.SignIn(model.UserId, false);
                    return Redirect(returnUrl);
                }
            }
...
Run Code Online (Sandbox Code Playgroud)

请注意,SecurityCookies是由delphi生成的cookie中的自定义绑定类生成的 - 这很有效.

对delphi dll的调用也可以.

我必须克服的问题是几乎所有对.Net应用程序的调用都是ajax请求.但是,当用户未登录时,浏览器会因重定向而进行3次调用:1)原始ajax请求2)重定向到〜/ Account/Logon(上面的代码)3)重定向回原来的ajax请求

虽然跟踪回发给客户端的响应,但显示步骤3返回正确的数据,整个过程因尚未确定的原因而失败.只需单击客户端上的刷新即可,因为现在用户已通过身份验证,并且不会重定向到〜/ account/Logon.

注意我的客户端jQuery代码如下:$ .getJSON(requestString,function(data){//对数据执行某些操作});

有没有办法更改窗体身份验证过程,以便在用户未经过身份验证时,而不是重定向到Url,我可以运行其他一些代码?我希望身份验证已经发生在用户的浏览器中完全不可见.

asp.net ajax asp.net-mvc forms-authentication

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

使用参数将文件拖放到EXE上

我不确定这是否会成为编程问题 - 这实际上取决于我猜的答案.

我有一个命令行实用程序,可以通过删除文件来触发它.

发生这种情况时,基本上会触发该过程:

myUtility.exe Filepath/FileName.xyz
Run Code Online (Sandbox Code Playgroud)

我想保留拖放功能,但包含一组固定的选项:

myUtility.exe Filepath/FileName.xyz -f -g
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

请注意,唯一的变量是已删除文件的文件路径/文件名.我无法修改utility.exe本身.

我想知道是否可以创建一个批处理文件作为中间人,以便将文件放到导致批处理文件的快捷方式上,这将捕获丢弃的文件名然后调用utility.exe用文件名添加所需的选项.

windows batch-file

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