哪里描述了众所周知的Silverlight类型的反射限制?
例如:如果我尝试使用PropertyInfo.SetValue方法设置protected或private属性值,我会得到一个异常MethodAccessException.
为什么这些限制?
在我的ASP.NET MVC应用程序中,我有一个包含所有业务逻辑/服务层的项目.该项目与我的数据库(实体框架)进行交互,该数据库位于一个单独的项目中.
我希望能够轻松访问服务层,因此我在其中创建了静态类,以便可以轻松地引用它们.例如,如果我在我的控制器中,我需要创建一个新帐户:
ServiceLayer.Accounts.CreateAccount(userName, passWord) //etc..
Run Code Online (Sandbox Code Playgroud)
然后服务层执行所有必需的逻辑,然后通过存储库创建用户DatabaseLayer.
private static AllRepos _Repos;
private static AllRepos Repos {
get
{
if(_Repos == null)
_Repos = new AllRepos();
return _Repos
}
}
public static void CreateAccount(string username, password)
{
string salt = GenerateSalt();
Account newAccount = DatabaseLayer.Models.Account
{
Name = username,
Password = HashPassword(password, salt),
Salt = salt
};
Repos.AddAccount(newAccount);
}
Run Code Online (Sandbox Code Playgroud)
因为我不想在我的服务层中到处执行以下操作:
AccountRepository Accounts = new DatabaseLayer.AccountRepository();
Run Code Online (Sandbox Code Playgroud)
我为我的存储库创建了一个包装类,这样我只需要实例化一次就可以使用所有其他存储库.
public class AllRepos
{
private AccountRepository _Accounts;
public AccountRepository Accounts
{
get
{ …Run Code Online (Sandbox Code Playgroud) 请参阅以下示例(PHP)
class Parent
{
protected $_property;
protected $_anotherP;
public function __construct($var)
{
$this->_property = $var;
$this->someMethod(); #Sets $_anotherP
}
protected function someMethod()
...
}
class Child extends Parent
{
protected $parent;
public function __construct($parent)
{
$this->parent = $parent;
}
private function myMethod()
{
return $this->parent->_anotherP; #Note this line
}
}
Run Code Online (Sandbox Code Playgroud)
我是OOP的新手并且有点无知.
这里访问parent属性我正在使用该类的一个实例,这似乎是错误的:S(不需要我是孩子).有没有一种简单的方法,以便我可以将父属性与子属性同步,并且可以直接访问$ this-> anotherP而无需使用$ this-> parent-> anotherP?
所以..
我将数据传递给一个处理字符串和数字的函数.
我希望能够传递一组值并检测每个值的类型.
row[0] = 23;
row[1] = "this is a string... look at it be a string!";
row[2] = true;
$.each(row, function(){
alert(typeof(this));
//alerts object
});
Run Code Online (Sandbox Code Playgroud)
是否可以检测给定行中的"实际"数据类型?
假设我有一份A的仲裁清单
class A
{
string K {get;set;}
string V {get;set;}
}
...
List<A> theList = ...
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法从列表中组成字典?(如下所示)
Dictionary<string, string> dict = magic(x => x.K, x => x.V, theList)
Run Code Online (Sandbox Code Playgroud)
我不想写下面的代码:
var d = new Dictionary<string, string>
foreach(var blah in theList)
d[blah.K] = blah.V
Run Code Online (Sandbox Code Playgroud) 任何人都可以推荐一个轻量级的开源C++表数据结构,其数据访问类似于数据库表吗?(即2D阵列但具有命名列 - 理想情况下,每列将保存单一类型的数据[见下文]).
我快速浏览了一下谷歌,但没有找到任何有用的东西.
我看到它的方式,这些是我可以选择的选项:
所以我在这里,选择最快的路线(希望这也是最有效利用我的时间的路线 - 因为这里推荐的任何东西都可能经过同行评审).
那么,任何人都可以推荐一个提供"数据库表"界面的C++类/类集吗?
主要要求是:
[编辑]
为了进一步演示我想如何使用该库,请参阅下面的伪代码,看看这个类的简单使用(简单,现在意味着行和列的迭代 - 这将非常酷).现在只是保持简单:
typedef MemoryTable::ColType ColumnType;
table = new MemoryTable();
// Set up the structure (this can be modified later using removeColumn() etc
table->addColumn(ColumnType::Integer, 'id');
table->addColumn(ColumnType::String, 'name');
table->addColumn(ColumnType::Boolean, 'gender');
table->addColumn(ColumnType::Double, 'weight');
for (size_t i=0; i<10; i++)
{
table->addRow();
numrows = table->getNumRows();
std::cout << "We now have " << numrows << " rows.\n";
// Note …Run Code Online (Sandbox Code Playgroud) 我的老板刚刚安装了 Windows 7,他尝试运行我们的安装程序之一,该安装程序在 XP 下运行得非常好。在 Windows 7 上,安装程序运行时不会出现任何错误。但是,它不会在 HKEY_LOCAL_MACHINE\SOFTWARE{Company}{product} 下创建注册表项。这些密钥在 XP 下可以正确创建。
有人遇到过这个问题吗?我怀疑这是一个权限/安全问题,但我不确定,而且我没有 Windows 7 可供试验。
编辑
相关计算机是运行 64 位 Windows 的 64 位计算机。事实证明,Windows 7 将 32 位应用程序重定向到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node{Company}{product}。问题是我的应用程序代码尝试使用如下硬编码值访问注册表:
var t = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\..., "ValueName", DefaultValue);
Run Code Online (Sandbox Code Playgroud)
那么,我的新问题是如何访问注册表以使 Windows 9 注册表重定向正常工作?
registry redirect visual-studio-2005 setup-deployment windows-7
我花时间在高级语言上突然想到我不知道Char数组和字符串之间的区别.我认为它们是相同的但不确定.有区别吗?它只是一个带有抽象的Char数组吗?
如果从数据库中提取链接的名称,您是否应该调用Html.Encode方法来清除名称?
例如:
Html.ActionLink(Model.PersonFromDB.FirstName,
"Action",
"Controller",
new RouteValueDictionary { { "id", Model.PersonFromDB.Id } },
null)
Run Code Online (Sandbox Code Playgroud)
要么:
Html.ActionLink(Html.Encode(Model.PersonFromDB.FirstName),
"Action",
"Controller",
new RouteValueDictionary { { "id", Model.PersonFromDB.Id } },
null)
Run Code Online (Sandbox Code Playgroud)
有意义的是你想要这样做以确保没有危险的字符串注入到页面之间<a>和</a>标签之间,但是脚本和锚标签之间的可执行文件?
随着我继续构建越来越多的网站和Web应用程序,我经常被要求以一种方式存储用户的密码,如果/当用户遇到问题时可以检索它们(要么通过电子邮件发送忘记的密码链接,请通过当我能够对抗这种做法时,我会做很多"额外"编程,以便在不存储实际密码的情况下进行密码重置和管理协助.
当我无法抗争(或无法获胜)时,我总是以某种方式对密码进行编码,以至于它至少不会以明文形式存储在数据库中 - 尽管我知道如果我的数据库被黑客攻击破坏密码的罪魁祸首并不需要太多,所以这让我感到不舒服.
在一个完美的世界里,人们经常更新密码,而不是在许多不同的网站上复制密码 - 不幸的是,我知道许多人拥有相同的工作/家庭/电子邮件/银行密码,甚至在需要帮助时自由地给我.如果我的数据库安全程序由于某种原因失败,我不想成为他们的财务终结负责人.
在道德和道德上,我觉得有责任保护一些用户的生活,即使他们以较少的尊重对待他们.我确信有许多途径可以用来腌制哈希和不同的编码选项,但是当你必须存储它们时,是否有一个"最佳实践"?在几乎所有情况下,我都使用PHP和MySQL,如果这对我应该处理细节的方式有任何不同.
附加信息Bounty
我想澄清一点,我知道这不是你想要做的事情,在大多数情况下拒绝这样做是最好的.但是,我并不是在寻找关于采取这种方法的优点的演讲我正在寻找采取这种方法时采取的最佳步骤.
在下面的一个注释中,我指出,当人们被要求执行安全的密码恢复程序时,主要针对老年人,智障人士或非常年轻人的网站可能会让人感到困惑.虽然在这些情况下我们可能会发现它简单而平凡,但有些用户需要额外的帮助,要么让服务技术人员帮助他们进入系统,要么将其直接通过电子邮件发送/显示给他们.
在这样的系统中,如果用户没有获得这种级别的访问协助,那么来自这些人口统计数据的流失率可能会阻碍应用程序,因此请记住这样的设置.
谢谢大家
这是一个有趣的问题,有很多争论,我很喜欢它.最后,我选择了一个保留密码安全性的答案(我不必保留纯文本或可恢复的密码),但也使我指定的用户群可以登录到系统而没有我从中找到的主要缺点正常的密码恢复.
由于不同的原因,我一直有大约5个答案,但我必须选择最好的答案 - 所有其他答案都是+1.感谢大家!
此外,感谢Stack社区中的每个人都投票赞成这个问题和/或将其标记为最喜欢的.我以100票赞成票作为赞美,并希望这次讨论能够帮助其他与我有同样关切的人.
asp.net-mvc ×2
.net ×1
actionlink ×1
c# ×1
c++ ×1
composition ×1
dictionary ×1
html-encode ×1
javascript ×1
jquery ×1
oop ×1
paradigms ×1
php ×1
redirect ×1
reflection ×1
registry ×1
security ×1
silverlight ×1
types ×1
windows-7 ×1