小编Che*_*hev的帖子

你如何根据用户交替Ninject绑定?

这个问题在它有意义之前需要一些上下文,所以我将从项目的描述开始.

项目背景

我有一个开源项目,这是一个命令提示式网站(U413.com,U413.GoogleCode.com).该项目是在ASP.NET MVC 3中构建的,并使用Entity Framework 4.本质上,该站点允许您传入命令和参数,然后站点返回一些数据.这个概念相当简单,但我不想使用一个巨大的IF语句来处理命令.相反,我决定做一些有点独特的事情,并构建一个包含所有可能命令作为对象方法的对象.

该站点使用反射来定位与已发送命令对应的方法并执行它们.此对象是基于当前用户动态构建的,因为某些用户可以访问不同于其他用户的命令(例如,管理员拥有的不仅仅是主持人,而且mod还有多个用户等等).

我构建了一个CommandModuleFactory将在MVC控制器中创建的自定义,并将调用它的BuildCommandModule方法来构建命令模块对象.我现在正在使用Ninject进行依赖注入,我想逐步淘汰这个CommandModuleFactory,支持ICommandModule在没有控制器做任何工作的情况下注入控制器.

ICommandModule 有一个方法定义,如下所示:

public interface ICommandModule
{
    object InvokeCommand(string command, List<string> args);
}
Run Code Online (Sandbox Code Playgroud)

InvokeCommand 是对自身执行反射以查找可能与传入命令匹配的所有方法的方法.

然后我有五个不同的对象继承自ICommandModule(其中一些继承自其他模块,所以我们不重复命令):

AdministratorCommandModule继承自ModeratorCommandModule哪些继承自的UserCommandModule继承BaseCommandModule.

然后我也VisitorCommandModule继承了,BaseCommandModule因为访问者将无法访问其他三个命令模块中的任何命令.

希望你能开始看看它是如何工作的.到目前为止,我对这一切的工作方式感到非常自豪.

问题

我希望Ninject为我构建我的命令模块并将其绑定到ICommandModule我可以让我的MVC控制器依赖ICommandModule它,它将收到它的正确版本.这是我的Ninject模块在绑定发生的位置.

public class BuildCommandModule : NinjectModule
{
    private bool _isAuthenticated;
    private User _currentUser;

    public BuildCommandModule(
        bool isAuthenticated,
        string username,
        IUserRepository userRepository
        )
    { …
Run Code Online (Sandbox Code Playgroud)

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

12
推荐指数
1
解决办法
1506
查看次数

编译器说我没有实现我的界面,但我是?

好的,我有两个名称空间.一个包含我的界面,一个包含实现类.像这样:

namespace Project.DataAccess.Interfaces
{
    public interface IAccount
    {
        string SomeMethod();
    }
}

namespace Project.DataAccess.Concrete
{
    class Account : Project.DataAccess.Interfaces.IAccount
    {
        string SomeMethod()
        {
            return "Test";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此代码我收到一个错误:

'Project.DataAccess.Concrete.Account'没有实现接口成员'Project.DataAccess.Interfaces.IAccount.SomeMethod'.'Project.DataAccess.Concrete.Account.SomeMethod'无法实现接口成员,因为它不是公共的

如果我将类和方法公开,它就可以正常工作.但是,如果我改为使用接口名称限定方法名称,那么它也会修复它.为什么?例如:

namespace Project.DataAccess.Concrete
{
    class Account : Project.DataAccess.Interfaces.IAccount
    {
        string IAccount.SomeMethod()
        {
            return "Test";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么要修复它?如果我不这样做,为什么必须公开呢?

要清楚

我很清楚将其公之于众.使方法签名看起来像这样没有公开修改它:

string IAccount.SomeMethod()
Run Code Online (Sandbox Code Playgroud)

为什么?

.net c# inheritance interface

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

如何从SQL Server中删除大型记录?

在论坛的数据库中,我错误地将主体设置为nvarchar(MAX).当然,有人发布了英国百科全书百科全书.所以现在有一个论坛主题因为这一篇文章而无法加载.我已经确定了帖子并对其进行了删除查询,但由于某种原因,查询只是坐下并旋转.我已经放了几个小时,它只是坐在那里.最终会超时.

我也尝试过编辑帖子的主体,但也可以坐着并挂起.当我坐下来让我的查询运行整个数据库挂起,所以我同时关闭该网站,以防止进一步的请求,而它正在思考.如果我取消我的查询,那么该网站将恢复正常,并且所有不涉及该问题的记录的查询都会非常有效.

其他人遇到过这个问题吗?有没有一种简单的方法来粉碎这个邪恶的记录?

更新:对不起,SQL Server的版本是2008.

这是我正在运行的删除记录的查询:

DELETE FROM [u413].[replies] WHERE replyID=13461
Run Code Online (Sandbox Code Playgroud)

我还尝试删除主题本身,该主题与回复和删除相关回复的主题上的回复和删除有关系.这也很常见.

sql sql-server-2008 sql-update sql-delete

12
推荐指数
1
解决办法
765
查看次数

试图简化我们的存储库模式

目前,我们已经在工作中实现了存储库模式.我们所有的存储库都位于自己的接口后面,并通过Ninject进行映射.我们的项目非常庞大,我试图解决的这种模式有几个怪癖.

首先,有一些控制器,我们需要在同一个控制器中有超过10到15个存储库.在要求这么多的存储库时,构造函数变得相当丑陋.在多个存储库上调用方法后,第二个怪癖就会显现出来.在使用多个存储库之后,我们需要调用SaveChanges方法,但是我们应该调用哪个存储库?每个存储库都有一个.所有存储库都注入了相同的Entity Framework数据上下文实例,因此选择任何随机存储库来调用save on都可以.它看起来很混乱.

我查看了"工作单元"模式并提出了一个我认为可以解决这两个问题的解决方案,但我对这个解决方案并不是100%有信心.我创建了一个名为的类DataBucket.

// Slimmed down for readability
public class DataBucket
{
    private DataContext _dataContext;

    public IReportsRepository ReportRepository { get; set; }
    public IEmployeeRepository EmployeeRepository { get; set; }
    public IDashboardRepository DashboardRepository { get; set; }

    public DataBucket(DataContext dataContext,
        IReportsRepository reportsRepository,
        IEmployeeRepository employeeRepository,
        IDashboardRepository dashboardRepository)
    {
        _dataContext = dataContext;
        this.ReportRepository = reportsRepository;
        this.EmployeeRepository = employeeRepository;
        this.DashboardRepository = dashboardRepository;
    }

    public void SaveChanges()
    {
        _dataContext.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎解决了这两个问题.现在SaveChanges数据桶本身只有一种方法,你只注入一个对象,数据桶.然后,您将所有存储库作为属性访问.数据桶看起来有点乱,因为它会在构造函数中接受所有(很容易50个或更多)我们的存储库.

添加新存储库的过程现在包括:创建接口,创建存储库,在Ninject中映射接口和存储库,以及向数据存储区添加属性并填充它.

我确实想到了一种替代方案,可以消除上面的一步.

public class DataBucket
{
    private …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework unit-of-work repository-pattern

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

在调整大小时如何保持两个表的列宽度同步?

我看了一下,似乎找不到一个像样的解决方案,这不需要一些疯狂的JavaScript,以解决以下问题.

示例中有两个单独的表.第一个是标题.第二个是身体.我们需要两个表,因为对此功能的要求是主体表可以在本地滚动,这意味着当表体滚动时,标题需要保持可见.我们不能使用任何新的花哨HTML 5数据透视表,因为我们必须支持IE.

有没有办法用纯CSS实现这一目标?它不一定是完美的,只要它看起来不错,就是我所需要的一切.

html javascript css dom

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

如何在ASP.NET MVC中使用多个表单元素

所以我是ASP.NET MVC的新手,我想创建一个带有文本框的视图,用于集合中的每个项目.我该怎么做,以及如何在POST回来时捕获信息?我已经使用表单和表单元素为模型构建静态表单,但从不基于可变大小的集合动态生成表单元素.

我想在mvc 3中做这样的事情:

@foreach (Guest guest in Model.Guests)
{
    <div>
        First Name:<br />
        @Html.TextBoxFor(???) @* I can't do x => x.FirstName here because
                                 the model is of custom type Invite, and the
                                 lambda wants to expose properties for that
                                 type, and not the Guest in the foreach loop. *@
    </div>
}
Run Code Online (Sandbox Code Playgroud)

如何为每位客人提供文本框?我如何在它回发的动作方法中捕获它们?

谢谢你的帮助.

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

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

如何在团队基础服务器中恢复变更集?

我是Team Foundation服务器的新手,有人提交了他们之前不应该做的更改.我需要恢复此更改集,以便当人们获得最新版本时,他们将无法获得这些更改.

我认为没有简单的方法可以做到这一点,有没有人有这方面的经验?

.net c# asp.net version-control tfs

11
推荐指数
1
解决办法
8107
查看次数

是否可以在.NET 4中动态创建路由?

在我们的应用程序中,我们使用新的.NET 4路由系统将某些请求路由到站点的其他部分.我们只允许在晚上发布我们的网站代码,这意味着我们必须迟到才能发布任何代码更改.我们经常需要创建自定义路由以支持旧内容的旧链接并将其路由到新内容.这些通常是需要的,因为我们的路由是在编译的global.asax中定义的,当我们立即需要这些实时但是无法执行代码推送时,我们会陷入僵局.

有没有办法我们可以在某种配置文件中定义路由并让网站以编程方式读取它们而无需重新启动应用程序?

.net c# asp.net routing .net-4.0

11
推荐指数
1
解决办法
3795
查看次数

EF 4.1 Code-first在我的应用程序中执行比常规EF慢3倍的查询

我有一个宠物项目(一个简单的论坛应用程序),我用它来测试所有最新的.NET技术,我最近开始使用Entity Framework Code-First.这个应用程序已经有一个现有的EF解决方案,EDMX文件映射到现有数据库,我的所有实体都是自动生成的.到目前为止,该解决方案运行良好.

注意:请记住,对EF 4.1的此更改纯粹是为了学习.如果你想知道我的需求是什么导致我升级,那就没有了.我只是想做有趣的事情.

我复制了项目并进行了升级,因此我将拥有相同的项目,但具有不同的实体框架实现.在新项目中,我使用名为Entity Framework Power Tools的Visual Studio扩展来从现有数据库生成POCO和DbContext.一切都完美无瑕.我在大约30分钟的时间内编译了应用程序.令人印象深刻

但是,我现在注意到,在运行应用程序时,查询执行速度比以前慢大约3倍.知道我错过了什么吗?

以下是两种解决方案的详细信息,以及两者的LINQPad测量.(点击图片查看完整尺寸)

EF 4.0详细信息

这是我的EF 4.0数据模型的快照.它切断了顶部和底部的一些实体,但你明白了.

http://www.codetunnel.com/content/images/EF41question/1.jpg 这是针对我的EF 4.0数据模型的LINQPad测试.

http://www.codetunnel.com/content/images/EF41question/2.jpg 请注意,查询执行时间为2.743秒.

EF 4.1详细信息

这是我的EF 4.1数据模型的快照.因为它只是代码,所以我将展示DbContext类以及一个实体和一个实体本身的映射类(流畅的API代码)之一.

DbContext http://www.codetunnel.com/content/images/EF41question/3.jpg TopicMap(流畅的API配置) http://www.codetunnel.com/content/images/EF41question/4.jpg 主题(POCO实体) http://www.codetunnel.com/content/images/EF41question/5.jpg 这是针对我的EF 4.1模型的LINQPad测试.

http://www.codetunnel.com/content/images/EF41question/6.jpg 请注意,这次查询需要6.287秒才能执行,这是完全相同的查询.它第一次运行需要30秒.如果我转到LINQPad中的SQL和IL选项卡,则生成的SQL和IL代码对于两个数据模型都是相同的.这真的让我悲伤.在实际应用中,EF 4.1的速度很慢,无法使用.

我针对两个模型运行了相同的LINQ查询.该查询为常规论坛用户抓取所有主题,按其上次回复日期(或主题发布日期,如果没有回复)按降序排序.

显然我可以回到EF 4.0并开始我的快乐方式,但我真的很感兴趣,如果可能有我错过的东西.

.net c# entity-framework entity-framework-4 entity-framework-4.1

11
推荐指数
1
解决办法
2787
查看次数

您如何在仪表板上订购瓷砖?

我的任务是在ASP.NET MVC 3 Web应用程序中创建仪表板界面.首先,我将列出此项目所需的功能,然后我将尽力说明我打算创建的内容以适应所有这些功能.

所需功能

  • 仪表板将包含可在仪表板界面中拖动的小部件(或磁贴).

  • 拖动小部件时,周围的小部件将适当地重新排序.

  • 小部件不是可调整大小或可折叠的,但它们是可移动的.如果用户愿意,用户将通过菜单添加小部件.

  • 小部件必须适应可变宽度的浏览器窗口.垂直空间几乎是无限的.

  • 小部件的高度和宽度将以300像素为增量,最大为900像素.换句话说,小部件可以是:300 x 300,600 x 300,300 x 900,900 x 900等.

我计划建立什么

以下是我希望构建的几个插图.

尺寸并不完美,但这显示了一个带有9个小部件的仪表板.所有小部件都很舒适,并尽力优雅地填充屏幕的宽度.但是,小部件不必形成完美的正方形或矩形.如下图所示,Danglers没问题.

请注意小部件的宽度和高度如何以300像素为增量,如上面的要求所述.这应该有助于更容易地重新排序瓷砖.这让我想到了我的问题.

我的问题

我理解了这个概念,但我无法弄清楚从哪里开始.我不像我希望的那样精通数学,我需要一些帮助才能指出正确的方向.

如何从一系列按特定顺序排序的小部件(各种形状和大小)中获取整齐排列的绝对定位的网格网格,尽可能优雅地占用空间?

我如何从中得到:

对此:

或者至少是一个同样优雅的布局.瓷砖不必位于如上图所示的确切位置.我只是想让他们玩一个完美的俄罗斯方块游戏,并没有尴尬的差距.


我需要考虑浏览器窗口的宽度,然后以某种方式遍历小部件数组并开始将它们添加到某种虚拟网格中.我希望它看起来像我能做到的那样优雅.

然后,在解决了我在初始页面加载后如何在页面上订购窗口小部件后,我需要允许用户移动他/她的窗口小部件并让其他窗口小部件尽可能整齐地重新排序以适应移动的窗口小部件的新位置.如果浏览器重新调整大小,我还需要一种优雅的方法来重新排序小部件.

我不期待全面的解决方案或实施.我只是需要一个在正确的方向,我认为.也许,一个简单的脑风暴描述循环通过小部件的逻辑和计算的东西,以达到最佳配置.

javascript css asp.net asp.net-mvc jquery

11
推荐指数
1
解决办法
2181
查看次数