小编Ben*_*enM的帖子

ASP.NET 5/ASP.NET Core 1中关注点和n层架构的分离

由于我想使用新的内置依赖注入,我很难找到一种优雅的方法来保持我的DAL层与ASP.NET 5中的MVC/UI层分开.

例如,我有一个ASP.NET 5项目,一个业务层项目和一个数据访问项目,其中我有各种实体框架代码,如实体和上下文.在ASP.NET 5中设置上下文并定位数据库主要文档建议我在StartUp.cs类中执行类似的操作

services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<BookContext>(options =>
    {
        options.UseSqlServer(Configuration.Get("Data:ConnectionString"));
    });
Run Code Online (Sandbox Code Playgroud)

这意味着我现在必须在基本上我的UI层中引用我的DAL,根据各种专家和博客文章,多年来一直是不好的做法.

我解决这个问题的一种方法是创建两个新项目,一个是CompositeRoot项目,它包含工厂类来生成我的业务类然后访问DAL,还有一个带有Configuration类的Utilities项目,其中有一个ConnectionString属性,我可以传入我的上下文,然后我使用内置的DI来连接所有内容并避免在我的UI层中引用我的DAL.但我遇到了最新版本的Entity Framework(beta 7)的问题,因为它现在似乎无法在上下文的构造函数或可重写中指定连接字符串OnConfiguration方法.此外,到目前为止,所有文档似乎都不关心这种混合问题.这就是我们现在做事的方式吗?相信开发人员不会做直接在UI中引用DAL类的"坏"事情?或者是否有一种模式,人们正在使用这种新的内置DI /配置为ASP.NET 5保持SOLID?

asp.net dependency-injection entity-framework-core asp.net-core-mvc asp.net-core

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

您是否可以自行测试剃刀视图而无需进行集成测试?

我有一个MVC网站,其中包含许多不同的步骤,用户必须通过它来完成它.有验证检查和定时部分(法律要求).每次我需要测试对页面的小改动时,必须进行集成测试才是真正令人头痛的问题.理想情况下,我想知道是否有一种方法(可能是一个插件?),这将允许我右键单击一个视图,以某种方式指定一个假的模型对象并直接打开它?

我最终要测试的是任何新的客户端脚本(它结合了razor/javascript/jQuery)在各种浏览器上的外观和工作方式.这不是关于测试我的控制器的功能.

c# integration-testing unit-testing razor asp.net-mvc-4

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

什么是C#中的Bootstrappers/Bootstrapping

我已经看到在几个不同的地方使用的这些术语都意味着不同的东西,这取决于所涉及的技术.请有人向我解释一下C#中的含义以及使用它的好处吗?

我正在寻找与C#中的bootstrapping相关的答案.我正在寻找在C#方面,bootstrapping如何与其他.NET框架/组件相关.

c# bootstrapper

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

无法在Visual Studio Online中删除团队项目

我正在使用VisualStudio.com来管理使用TFS源代码控制的团队项目.但是,我无法删除任何项目.我到目前为止采取的步骤是:

登录我的VSO帐户,然后单击齿轮图标进入管理模式.单击项目"项目安全性和团队成员资格页面".在权限部分,设置所有内容,包括允许删除团队项目,我保存了这个.

接下来,我进入概述选项卡,然后调出项目的上下文菜单.它有两个选项,"将团队设置为项目默认值"和"删除",这两个选项都是禁用选项.

visual-studio azure-devops

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

Azure 错误:建立与 SQL Server 的连接时发生网络相关或特定于实例的错误

我有通过 Microsoft Azure 平台托管的 SQL 服务器和 Web 应用程序。当我从本地网络运行Web应用程序(并尝试连接azure sql服务器)时,我不断收到上述错误,但是我从未在azure web应用程序服务上遇到问题(即在azure上托管我的web应用程序之后)

我知道这个错误很熟悉。但在这种情况下,这似乎很奇怪。我已经检查过以下内容,

  1. SQL 连接管理正确。(我使用的是ADO.Net)
  2. 所有网关 IP 均已针对 azure sql 列入白名单。
  3. 没有防火墙阻止我的专用网络。

任何帮助将不胜感激。

sql-server azure azure-sql-database azure-web-app-service

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

使用Entity Framework时,如何将数据库用户名和密码安全地存储在web.config文件中

使用Entity Framework访问非本地服务器上的数据库时,如何在连接字符串中指定用户名和密码参数(存储在web.config文件中)?

我已经阅读了C#分步指南(John Sharp 2010版),因为潜在的逆向工程或有人掌握了源代码,所以从不硬编码到您的应用程序中.所以我想知道这样做的传统最佳实践.

c# entity-framework database-connection password-protection

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

使用该站点的任何人都可以访问ASP.NET MVC网站中的全局值吗?或者它是每个会话的实例?

我向MVC4网站添加了一些新功能。我刚刚添加了一个全局静态类和一个全局变量来保存一个值,该值在用户访问网站期间的某个时刻确定,并将在以后用作条件。

然后我想到,我不确定在这种情况下静态值的全局性。

我是否必须将全局值指定为会话变量?

还是无论如何,站点的每个用户都可以在自己的会话中访问它,而我不必担心一个用户将其设置为一个值,而另一个用户可以访问此设置值。

asp.net asp.net-mvc global-variables asp.net-mvc-4

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

如何在C#深度第二版中以这种方式使用C#Dictionary?

我在Jon Skeet的深度第二版C#中遇到了以下代码,我不明白它是如何工作的.

Dictionary<string,int> frequencies;
frequencies = new Dictionary<string,int>();
string[] words = Regex.Split(text, @"\W+");
foreach (string word in words)
{
    if (frequencies.ContainsKey(word))
    {
        frequencies[word]++;
    }
    else
    {
        frequencies[word] = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

具体如何将"单词"键添加到字典中?在我看来,创建了一个名为frequency的新词典,它是空的.然后有一种方法使用Regex.Split将名为text的字符串拆分为字符串数组.到目前为止一切都很好 接下来有一个循环遍历数组的foreach循环,但下一部分将我绊倒,它检查频率是否包含特定单词,如果确实如此,则将其值增加1或者如果它还没有将值设置为1.但是如何首先使用"word"键填充字典以允许对其进行检查?

它似乎发生在这一行

frequencies[word] = 1;
Run Code Online (Sandbox Code Playgroud)

但我无法在任何地方找到一个引用,指的是指定字典对象后跟方括号,并且对值的赋值也会填充键.我认为你需要使用字典实例的add方法,或者在初始化字典时这样做.

如果我是对的,这个动作的名称是什么?

c# dictionary

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

为什么不向JavaScript构造函数添加功能,而是通过原型添加?

我看看Addy Osmani关于构造函数模式的章节:http://addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript 我发现了以下内容:

function Car( model, year, miles ) {

  this.model = model;
  this.year = year;
  this.miles = miles;

  this.toString = function () {
    return this.model + " has done " + this.miles + " miles";
  };
}

// Usage:

// We can create new instances of the car
var civic = new Car( "Honda Civic", 2009, 20000 );
var mondeo = new Car( "Ford Mondeo", 2010, 5000 );

// and then open our browser console to …
Run Code Online (Sandbox Code Playgroud)

javascript constructor

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

通过SSL传递时的Cookie安全性

我是否正确地认为,如果您通过SSL加密请求传递会话cookie,则只能由直接访问已发送cookie的计算机的攻击者读取cookie,或者从已发送cookie的服务器读取cookie ,如果他们无法破解加密?

security cookies ssl session-cookies

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