小编big*_*mac的帖子

我担心我添加了太多的接口

我正在构建我的域模型并继续重构它.像我一样,我发现我喜欢接口,因为它允许我根据接口为具体类型创建可重用的方法/控制器/视图.但是,我发现每次向其中一个域实体添加新属性时都会创建一个接口.

例如,我有一个MemberStatus对象,它继承自一个抽象的Entity对象,该对象又实现了IIdentifiableEntity接口,这意味着它具有Id属性.MemberStatus还实现了INamedEntity接口,这意味着它具有Name属性,IOrderedEntity接口意味着它具有DisplayOrder属性,IHasMembers接口意味着它具有集合成员对象.这是代码:

public class MemberStatus : Entity, INamedEntity, IOrderedEntity, IHasMembers
{
  public string Name { get; set; }
  public float DisplayOrder { get; set; }
  public ICollection<Member> Members { get; set; }
}

public abstract class Entity : IIdentifiableEntity
{
  public int Id { get; set; }
}

public interface IIdentifiableEntity
{
  int Id { get; set; }
}

public interface INamedEntity
{
  string Name { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# oop interface

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

在web.config中定义实体框架SetInitializer

现在,在开发中,我在Global.asax.cs文件中有以下代码,使用我的SeedSampleData方法调用Entity Framework(v4.1)SetInitializer.一切都很完美.

但是,我想通过web.config设置存储SetInitializer"strategy"参数,以便我可以创建一个deployement脚本,new System.Data.Entity.CreateDatabaseIfNotExists<EfDbContext>()在生产部署期间自动将其设置为而不是我的种子方法.

想要将其移动到web.config的原因是当我将新部署推广到生产服务器时,我想确保我不会意外地将我的种子初始化程序留在代码中.

protected void Application_Start()
{
  //TODO: Figure out how to move the following lines to web.config and have a deployment script modify it when going to production.

  //This line is for production
  //System.Data.Entity.Database.SetInitializer(new System.Data.Entity.CreateDatabaseIfNotExists<EfDbContext>());

  //This line is for development
  System.Data.Entity.Database.SetInitializer(new Domain.Concrete.SeedSampleData());

  //... Remainder of Application_Start calls here...
}
Run Code Online (Sandbox Code Playgroud)

entity-framework web-config

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

将表名作为参数传递给Dapper

是否可以将表名作为参数传递给Dapper Query命令?我不是在寻找SQL表定义的函数或SQL表变量.我想在C#中定义表名并将其传递给Dapper.这是我的代码,执行时返回错误Must declare the table variable "@TableName"

var foo = conn.Query("SELECT * FROM @TableName WHERE Id = @Id", new { TableName = "MyTable", Id = 123 });
Run Code Online (Sandbox Code Playgroud)

dapper

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

如何在我的MVC3项目中正确配置Ninject.Extensions.Logging.Log4Net

我正在尝试正确使用Ninject将log4net日志记录注入我的MVC3应用程序.我正在使用Ninject.MVC3包,所以我有NinjectMVC3类,它自动扩展App_Start方法并包含绑定所有依赖项的RegisterServices方法.我也有Ninject.Extensions.Logging.Log4Net包,但我不知道如何使用它.我已经知道如何在我的web.config中配置log4net,但不知道如何在DI中使用此扩展.

我已经阅读了以下所有文章/帖子,但它们似乎都没有定义如何正确设置DI日志的项目.

http://dotnetdarren.wordpress.com/2010/07/29/logging-in-mvc-part-4-log4net/,Darren提供了一篇很棒的文章,但似乎没有处理DI(至少我没有看得出来.

使用Ninject填充Log4Net依赖关系时,Remo Gloor在此声明扩展应提供实现所需的全部内容,但它没有显示如何实例化它的代码.

https://github.com/ninject/ninject.extensions.logging/wiki/Using上的ninject.extensions.logging文档充其量是非常有限的.我已多次重读它,但仍然没有看到如何在NinjectMVC3类中使用绑定注入,或者例如如何从我的控制器类调用记录器的具体示例.

在最有希望的文章中,Moosaka在Ninject.Extensions.Logging.Log4net意外行为中提供了一些很棒的代码,但是当我尝试它时,我在LoggerFactory中得到一个编译错误,ILogger logger = new Logger(type);声明"无法在此处访问受保护的构造函数'Logger'".此外,他声称"把整个烂摊子扔进一个单独的类库".这是否意味着整个单独的项目?

我只是迷失在所有不同的选项和日期的帖子中,并希望在我的MVC3项目中如何使用Ninject和Log4Net的Dependancy Injection进行任何输入.此外,如果它很重要,我的所有Ninject代码都在我的域项目中,但是日志需要从域和Web项目完成(并在我的单元测试中进行模拟).任何帮助表示赞赏.

asp.net-mvc log4net ninject

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

Windows Azure VPN - 如何安装/使用Azure Connect

我觉得这里像个白痴.我在Azure中设置了一个简单的Windows虚拟机,需要通过VPN访问12个远程用户(他们都在家工作)才能访问共享驱动器.我认为这将是非常容易的,但我花了几天时间试图解决这个问题.

我有服务器设置,我现在已经意识到(经过几天的搜索)使用RRAS的传统PPTP或L2TP VPN无法正常工作,因为Azure框架会阻止这些协议.我也从帖子中看到过这样一个说使用Azure Connect的帖子,它应该可以满足我们的需求.但是,该文章中对Herve Roggero博客甚至微软自己的Azure支持网站的引用都谈到了我无法使用的功能,屏幕截图看起来与我在Azure控制台上看到的不同.实际上,Microsoft站点帮助文档的使用时间为2到2.5年.认真MS ...更新你的文档!

我的控制台看起来像这个图像(来自Google搜索的示例图像......不是我的真实界面)

但是,文章引用了看起来像这个图像的控制台

我没有使用正确的Azure版本吗?他们是否更新了界面而没有更新文档?底线,如何(使用我拥有的Azure界面)可以使用Azure Connect?我尝试创建虚拟网络,但没有任何内容可以选择使用Windows Azure Connect安装本地端点.我是白痴还是我在这里错过了什么?

vpn azure azure-connect

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

使用Ninject 3.0.0进行基于约定的依赖注入

我的解决方案中有两个项目......域项目和MVC3 Web项目(例如MyApp.Domain和MyApp.Web).以前,当使用Ninject.Extensions.Conventions ver.2,我能够在NinjectMVC3.cs文件中使用以下语句,并且在我的解决方案(web和域)中所需的依赖项被正确注入(例如,IFoo自动绑定到Foo).

kernel.Scan(x =>
{
  x.FromAssembliesMatching("*");
  x.BindWith<DefaultBindingGenerator>();
});
Run Code Online (Sandbox Code Playgroud)

我刚刚升级到Ninject 3.0.0(预发布)和Ninject.Extensions.Conventions 3.0.0(另一个预发行版),但基于约定的绑定的语法已经改变.我已经发现我可以在新版本中使用以下语句,但它只会自动绑定MyApp.Web中基于约定的接口而不是MyApp.Domain.以前的版本绑定了整个应用程序的接口.

kernel.Bind(x => x
    .FromThisAssembly()
    .SelectAllClasses()
    .BindToAllInterfaces());
Run Code Online (Sandbox Code Playgroud)

我是如何使用新的Ninject版本配置基于约定的绑定的?我假设它与指定程序集有关,但我已经尝试过使用,FromAssembliesMatching("*")然后它就失败了.

- 编辑以在RegisterServices方法中显示我现有的代码: -

private static void RegisterServices(IKernel kernel)
{
  // This code used to work with v.2 of Ninject.Extensions.Conventions
  // kernel.Scan(x =>
  // {
  //   x.FromAssembliesMatching("*");
  //   x.BindWith<DefaultBindingGenerator>();
  // });

  // This is the new v3 code that automatically injects dependencies but only for interfaces in MyApp.Web, not MyApp.Domain
  kernel.Bind(x => x.FromThisAssembly().SelectAllClasses().BindToAllInterfaces()); 

  // I tried this code, but …
Run Code Online (Sandbox Code Playgroud)

dependency-injection ninject ninject-extensions

9
推荐指数
1
解决办法
5769
查看次数

需要使用大于或小于比较两个通用对象

概要:我需要使用两个通用的C#对象,如果它们是数字,则使用小于或大于比较来比较它们.

问题:我无法弄清楚如何让我的类实现IComparable,如本文所述:必须实现一个小于和大于操作的泛型.如果这不是正确的路径,那么我也需要知道.

背景:我已经实现了在更复杂的自定义验证器中找到的RequiredIf ValidationAttribute,但除了等于比较之外还需要>和<选项.

代码(取自更复杂的自定义验证器,页面下三分之一):

private bool IsRequired(object actualPropertyValue)
{
  switch (Comparison)
  {
    case Comparison.IsLessThan:
    case Comparison.IsLessThanOrEqualTo:
    case Comparison.IsGreaterThan:
    case Comparison.IsGreaterThanOrEqualTo:
      if (!Value.IsNumber())
      {
        throw new Exception("The selected comparison option is only applicable to numeric values");
      }
      break;
  }

  switch (Comparison)
  {
    case Comparison.IsNotEqualTo:
      return actualPropertyValue == null || !actualPropertyValue.Equals(Value);
    case Comparison.IsEqualTo:
      return actualPropertyValue != null && actualPropertyValue.Equals(Value);
    case Comparison.IsGreaterThan:
      // THIS LINE FAILS BECAUSE actualPropertyValue DOESN'T IMPLEMENT IComparable 
      return …
Run Code Online (Sandbox Code Playgroud)

c# comparison

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

Orchard根据过滤的下拉选项创建投影或搜索

我有,我认为是一个简单的功能,我试图添加到我的Orchard(1.6)网站,但我找不到任何教程或说明如何做到这一点.我有一个名为"Office"的自定义类型,每个办公室都有一个名为"State"的自定义字段,表示办公室所处的状态.我实际上将我的办公室设计为代码中的自定义部分,具有特定属性,例如State on it,但是我"想想"就像我通过Admin界面将State添加为Office内容部分的字段一样.

现在,我可以创建一个基本投影,向所有办公室显示一个简单的"Content with type Office"过滤器,以显示所有办公室.但是,我现在要做的是在页面顶部有一个下拉列表,其中显示" 按以下方式过滤:[-SELECT STATE-] ",其中包含所有50个州的列表.当用户选择状态时,页面应刷新并仅显示该状态的办公室.

这就是我被困住的地方.我应该通过代码执行此操作,还是可以通过管理UI执行此操作?如果通过代码,我应该在Orchard.Search模块之后对其进行建模(我试图这样做,但我完全迷失了).如果我可以通过UI完成,我是否使用投影?如果是这样,我是否必须创建50个单独的投影(每个状态一个)?创建和维护这似乎非常耗时.

任何帮助是极大的赞赏!

仅供参考,http://ktowneric.com/listings/search(使用Orchard)的网站与我正在寻找的非常相似,开发人员表示他使用了预测,但我似乎无法弄清楚他是如何做到的它.

orchardcms

9
推荐指数
1
解决办法
2376
查看次数

MvcSiteMapProvider - 多个页面需要链接到一个菜单节点

在我的MVC3项目中,我安装了Maartenba的MvcSiteMapProvider v.3.2.1,并且我创建了一个非常简单的静态两级菜单.下面是概念图结构.

- Home
- Member Center
    - Member Listing [SELECTED]
    - Event Calendar
    - Documents
- Administration
Run Code Online (Sandbox Code Playgroud)

现在,会员列表下有很多子页面(例如详细信息,编辑等),但我希望这些子页面显示为第3级菜单项(主要是因为它们与特定的成员ID绑定).但是,我确实希望所有这些第三级页面都与"成员列表"菜单节点"绑定",以便在这些页面上显示为已选中.

我的Mvc.SiteMap文件中有以下代码:

<mvcSiteMapNode title="Home" controller="Home" action="Index">
  <mvcSiteMapNode title="Member Center" area="Members" controller="Home" action="Index" roles="Approved Member" >
    <mvcSiteMapNode title="Member Listing" area="Members" controller="Member" action="List" />
    <mvcSiteMapNode title="Event Calendar" area="Members" controller="Event" action="List" />
    <mvcSiteMapNode title="Documents" area="Members" controller="Document" action="List" />
  </mvcSiteMapNode>
  <mvcSiteMapNode title="Administration" area="Admin" controller="Home" action="Index" roles="Site Administrator" >
  </mvcSiteMapNode>
</mvcSiteMapNode> 
Run Code Online (Sandbox Code Playgroud)

要呈现菜单,我在_Layout.cshtml文件中使用以下代码:

@Html.MvcSiteMap().Menu(1, true, true, 1, true, true)
Run Code Online (Sandbox Code Playgroud)

最后,我修改了SiteMapNodeModel.cshtml文件,以便将"selectedMenuItem"类添加到与用户正在查看的页面相关的节点.这是呈现菜单节点的snippit.

@model SiteMapNodeModel …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc mvcsitemapprovider

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

在单行中创建并传递表值参数

使用SQL Server 2012,是否可以省略声明表值参数(TVP)只是为了将其传递给存储过程?下面是一个存储过程(SP)的一个非常简单的例子,它采用TVP和一个工作示例来执行该SP,我必须声明TVP,填充它然后将其传递给SP.我希望能够简单地将人口标准直接传递给EXEC电话.这可能吗?

场景设置:

-- Create a sample Users table
CREATE TABLE Users (UserID int, UserName varchar(20))
INSERT INTO Users VALUES (1, 'Bob'), (2, 'Mary'), (3, 'John'), (4, 'Mark')

-- Create a TVP Type
CREATE TYPE UserIdTableType AS TABLE (UserID int)

-- Create SP That Uses TVP Type
CREATE PROCEDURE GetUsers
@UserIdFilter UserIdTableType READONLY
AS
    SELECT * FROM @UserIdFilter WHERE UserID > 2
Run Code Online (Sandbox Code Playgroud)

执行的工作方法:

DECLARE @MyIds AS UserIdTableType
INSERT INTO @MyIds SELECT UserID FROM Users
EXEC GetUsers @MyIds
Run Code Online (Sandbox Code Playgroud)

要求执行的方法:

EXEC …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures table-valued-parameters

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