MEF允许您通过使用ImportMany
属性导入多个零件.它如何确定检索相关导出的顺序并将它们添加到您正在填充的可枚举中?例如,如何导入必须以特定顺序触发的多个IRules?我能想到的唯一方法是在IRule中使用OrderValue属性并手动排序:
public class Engine
{
[ImportMany]
public IEnumerable<IRule> Rules { get; set; }
public void Run()
{
// ...
// Initialise MEF
// ...
//
// Do I need to manually order Rules here?
//
foreach (IRule rule in Rules)
{
// Must execute in a specific order
rule.Execute();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在拆分最初位于单个Subversion存储库中的旧应用程序套件.
我已将其转换为Git存储库并删除了我不想要的内容,但我想通过删除与已删除文件关联的历史数据来缩小存储库(将保留原始存储库以供参考目的所以新的不需要它.
理想情况下,我想要做的是遍历整个存储库并删除工作目录中不存在的任何文件或文件夹,以及与之关联的任何历史记录.这将留给我HEAD的内容和影响这些文件的提交历史.但是,我没有遇到这样做的方法(孤儿HEAD没有帮助,因为它没有保留历史记录).
这可能吗?我知道如何通过git-filter-branch从整个历史记录中删除单个文件或文件夹,但是有太多的文件和文件夹,这是一个实用的方法......除非有一种方法可以过滤所有不在HEAD中的文件?
我就直接写这个问题杰弗里里希特,但最后时刻他没有回答我:)所以我会尽量在这里得到你的帮助的答案,球员:)
杰弗里写道,在第9版"CLR via C#"一书中,第108页写道:
void M3() {
Employee e;
e = new Manager();
year = e.GetYearsEmployed();
...
}
Run Code Online (Sandbox Code Playgroud)
M3中的下一行代码调用Employee的非虚拟实例GetYearsEmployed方法.调用非虚拟实例方法时,JIT编译器将查找与用于进行调用的变量类型对应的类型对象.在这种情况下,变量e被定义为Employee.(如果Employee类型没有定义被调用的方法,则JIT编译器将类层次结构向下移向Object以寻找此方法.它可以这样做,因为每个类型对象都有一个引用其基类型的字段;信息未在图中显示.)然后,JIT编译器在类型对象的方法表中查找引用被调用方法的条目,JIT方法(如果需要),然后调用JITted代码.
当我第一次读到这篇文章时,我认为在JIT-ting期间沿着类层次结构寻找方法是没有效果的.在编译阶段很容易找到该方法.但我相信杰弗里.我在另一个论坛上发布了这个信息,另一个人证实了我的疑问,这是奇怪的,并且无效,而且似乎是错误的信息.
实际上,如果您在反编译器中查找相应的IL代码,例如ILDasm或Reflector(我已经检入过),您将看到IL有一个callvirt指令从基类调用该方法,因此JIT不会需要查看方法在运行时所在的类:
public class EmployeeBase
{
public int GetYearsEmployed() { return 1; }
}
public class Employee : EmployeeBase
{
public void SomeOtherMethod() { }
}
public class Manager : Employee
{
public void GenProgressReport() { }
}
...
Employee e;
e = new Manager();
int years = e.GetYearsEmployed();
Run Code Online (Sandbox Code Playgroud)
产生的IL是:
L_0000: nop
L_0001: newobj instance void TestProj.Form1/Manager::.ctor()
L_0006: stloc.0 …
Run Code Online (Sandbox Code Playgroud) 如果我错了,请纠正我,但MEF只适用于管理一组可以自动发现和自动连接的未知事物(插件).对于未来的项目,我们需要一个真正的IoC容器来明确地配置应用程序的已知部分(MEF至极不在好),但另外我们还需要支持插件自动发现(最好没有POCO的属性,如果可能的话).IoC容器可以轻松地/默认支持吗?如果是这样,你可以快速提示如何在Unity和StructureMap中完成这项工作吗?这是我们目前支持的两个.我们真的希望避免依赖IoC容器和 MEF.
所以我们都去过一些禁用浏览器后退按钮的恼人网站.这可以通过快速按下后退按钮两到三次来规避.我的问题是:当后退按钮被禁用时发生了什么,以及2.)为什么单击按钮两到三次才能解决问题?渴望得到答案,不要让我失望,所以!:)
我从 GNU getline 文档中读到它能够将某些回调函数绑定到某些键。我已经知道如何TAB使用rl_bind_key
函数将操作绑定到按键。
但是我如何使用它来将某些操作绑定到以下键?: CTRL+ TAB, ESC, PAUSE/BREAK
当终端输出文本时,如何使终端(或Visor / TotalTerminal)平滑滚动。这样,在显示git diffs时,我不会完全失去位置感。或者,当使用CTRL- D和CTRL- 在vim模式下导航长差异时U。我不希望终端“跳”到一个新的地方,而是顺畅地流向它。
(我正在使用osx雪豹)
为什么这段代码有效:
SELECT year, sum(value)
FROM test
GROUP BY year
Run Code Online (Sandbox Code Playgroud)
这不是吗?
SELECT year, sum(value)
FROM test
GROUP BY year
WHERE `user` = 1
Run Code Online (Sandbox Code Playgroud) <td class="blue">
<a href="lnk1.aspx">Hi1</a>
<a href="lnk2.aspx">Hi2</a>
<a href="lnk3.aspx">Hi3</a>
<div>Not Blue</div>
</td>
Run Code Online (Sandbox Code Playgroud)
我希望标签中的类("蓝色")使Hi1,Hi2和Hi3变为蓝色.
那个班的主管应该是什么?
????
{
color:blue;
}
Run Code Online (Sandbox Code Playgroud)