我刚刚使用Dustin Campbell的WeakEvent类为项目添加了一个弱事件实现.虽然盲目使用Code I Found On The Internet™通常是一个坏主意,但它的实现要比我之前一起攻击的好得多.到目前为止它似乎运行良好,但为了理解代码,我遇到了以下情况:
public class WeakEventHandler<T, E> : IWeakEventHandler<E>
where T : class
where E : EventArgs
{
private delegate void OpenEventHandler(T @this, object sender, E e);
...
Run Code Online (Sandbox Code Playgroud)
我习惯只使用object sender和EventArgs args参数声明委托类型,那么该T @this部分实现了什么?显然,这是宣布的东西 WeakEventHandler的T泛型类型,但我从来没有见过@this之前(和谷歌搜索这是可以理解的绝望).
我编写了一个命令行工具,它预处理了许多文件,然后使用CodeDom编译它们.该工具将版权声明和一些进度文本写入标准输出,然后使用以下格式从编译步骤中写入任何错误:
foreach (var err in results.Errors) {
// err is CompilerError
var filename = "Path\To\input_file.xprt";
Console.WriteLine(string.Format(
"{0} ({1},{2}): {3}{4} ({5})",
filename,
err.Line,
err.Column,
err.IsWarning ? "" : "ERROR: ",
err.ErrorText,
err.ErrorNumber));
}
Run Code Online (Sandbox Code Playgroud)
然后它写入错误的数量,如"14个错误".
这是错误如何出现在控制台中的示例:
Path\To\input_file.xrpt (73,28): ERROR: An object reference is required for the non-static field, method, or property 'Some.Object.get' (CS0120)
Run Code Online (Sandbox Code Playgroud)
当我在VS2008中将其作为自定义工具运行时(通过在我的项目程序集之一的后期构建事件命令行中调用它),错误在错误列表中显示格式很好,每列中都有正确的文本.当我翻转文件名时,会弹出完全限定的路径.行和列与源文件不同,因为预处理很好.唯一突出的是列表中给出的项目是具有后构建事件的项目.
问题是,当我双击错误时,没有任何反应.我原本希望文件在编辑器中打开.
我很清楚地知道Microsoft.VisualStudio.Shell.Interop命名空间,但我认为应该可以通过写入标准输出来实现.
编辑:我注意到了一些问题,并自己解决了这个问题:
我已经编写了一个基本的密码管理器类型的Web应用程序,可以在移动设备上离线运行(在第4代iPod Touch上进行测试).我已经将应用程序添加到主屏幕,当iPod在线并且可以到达服务器时,一切正常.一旦我将iPod置于离线状态,当我打开应用程序时,会出现以下对话框:
无法打开PwdThing
无法打开PwdThing,因为它未连接到Internet
app(passwordthing.html)的单个静态HTML文件指向清单文件:
<html manifest="cache.manifest">
...
Run Code Online (Sandbox Code Playgroud)
该cache.manifest文件包含应用程序使用的所有文件(包括jQuery Mobile文件):
CACHE MANIFEST
passwordthing.html
passwordthing.js
...
Run Code Online (Sandbox Code Playgroud)
并且cache.manifest文件设置为text/cache-manifest在.htaccess文件中提供:
AddType text/cache-manifest .manifest
Run Code Online (Sandbox Code Playgroud)
所有源文件都在Github上(这个提交是编写时的版本),我已经设置了一个公共服务器来安装它.
为什么我不能让我的应用程序脱机工作?
我正在尝试使用Cecil来查找使用常规测试接口的泛型方法调用的实例.我无法从中识别泛型类型MethodReference.
我已经设置了一个基本测试:
private interface IAnimal
{
}
private class Duck : IAnimal
{
}
private class Farm
{
private readonly ICollection<string> _animals = new List<string>();
public void Add<T>()
{
_animals.Add(typeof(T).Name);
}
public override string ToString()
{
return string.Join(", ", _animals);
}
}
static Farm FarmFactory()
{
var farm = new Farm();
farm.Add<Duck>();
farm.Add<Duck>();
farm.Add<IAnimal>(); // whoops
farm.Add<Duck>();
return farm;
}
private static void Main(string[] args)
{
var farm = FarmFactory();
Console.WriteLine("Farm:");
Console.WriteLine(farm);
// Use Cecil to find the …Run Code Online (Sandbox Code Playgroud) 我正在重构一个庞大的代码库中的讨厌,需要找到一个特定的方法,接受一个相当通用的接口的实例,用该接口的特定实现调用.
例如,在NastyStatic是的DoBadThings(IBusinessObject)方法.我有大约50个IBusinessObject在我的业务库中实现的类,包括DontHurtMe : IBusinessObject.
我怎样才能找到每一个电话NastyStatic.DoBadThings(foo),但只能找到foo一个实例DontHurtMe?
编辑:我正在使用某种静态分析工具.在DoBadThings(或类似)中设置动态监视并运行应用程序并不是一个真正的选择.由于我所做的更改,它已经抛出一个异常DontHurtMe,并且有太多的代码路径可以找到所有这些用法(至少在它上线并且我的用户开始抱怨之前).
我有一个使用Caliburn.Micro的WPF应用程序.当我希望应用程序等待在后台完成某些工作时,我希望能够使用阴影和进度环(来自MahApps.Metro)覆盖应用程序.
我现在所拥有的实际上是有效的,但叠加层在设计时始终处于开启状态.我的ShellView窗口看起来像这样:
<Window ...>
...
<Grid>
...
<Rectangle x:Name="waitShadow" Fill="#3f000000" Stroke="Black" StrokeThickness="0" Visibility="{Binding IsWaiting, Converter={StaticResource BooleanToVisibilityConverter}}" Grid.RowSpan="2"/>
<ContentControl ... Visibility="{Binding IsWaiting, Converter={StaticResource BooleanToVisibilityConverter}}">
<Controls:ProgressRing ...> <!-- from MahApps.Metro -->
</Controls:ProgressRing>
</ContentControl>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
我的ShellViewModel班级有一个公共bool属性IsWaiting,当我把它设置为true阴影和响铃出现,一切都被禁用.当我将它设置为false它去恢复正常,所以绑定工作(我使用Fody用的PropertyChanged插件).唯一的问题是该Visibility属性在设计时没有崩溃.
有没有更好的方法让叠加层在设计时有效?
如何将此代码转换为LINQ?
var TcData = new List<double>();
for(int i=0;i< numberTcs ;++i)
{
TcData.Add(-1);
}
Run Code Online (Sandbox Code Playgroud) 我不能让我的WPF布局工作.我希望ListBox通过锚定到窗口底部来垂直拉伸.它当前只是StackPanel("添加"和"删除"按钮)中控件高度的大小,并调整大小以容纳添加的项目.在WinForms中我会设置ListView.Anchor,Top|Left|Bottom|Right但我不应该活在过去.我已经尝试了很多东西,比如把它放进去DockPanel,把所有东西都装进去Canvas等等,但似乎没有任何影响.

这是我的XAML:
<Window x:Class="FileDropAdmin.ViewsTestListView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:shared="http://schemas.markpad.net/winfx/xaml/shared"
Title="ViewsTestListView" Height="300" Width="416">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock TextWrapping="Wrap" VerticalAlignment="Top" Text="Things:" />
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<ListBox x:Name="Things" DisplayMemberPath="ThingName" SelectedItem="CurrentThing" Grid.Column="0"/>
<StackPanel Margin="5 0 0 0" VerticalAlignment="Top" Grid.Column="1">
<Button x:Name="AddThing" Content="Add" Margin="0 0 0 0" VerticalAlignment="Top"/>
<Button x:Name="RemoveThing" Content="Remove" Margin="0 5 0 0" VerticalAlignment="Top"/>
</StackPanel>
</Grid>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud) 我们在具有 DDD 架构的 asp.net MVC 中应用了 autofac IOC 容器。我们正在尝试使用不同的数据库连接注册两个 dbcontext。但只有最后一个生效。我们正在使用实体框架 4.4.0。这是代码。
var masterDataSettingManager = new SaasDataSettingManager();
if (masterDataSettingManager.LoadSettings() != null)
{
var masterProviderSettings = masterDataSettingManager.LoadSettings();
builder.Register(c => masterDataSettingManager.LoadSettings()).As<DataSettings>();
builder.Register(x => new EfDataProviderManager(x.Resolve<DataSettings>())).As<BaseDataProviderManager>().InstancePerDependency();
builder.Register(x => (IEfDataProvider)x.Resolve<BaseDataProviderManager>().LoadDataProvider()).As<IDataProvider>().InstancePerDependency();
builder.Register(x => (IEfDataProvider)x.Resolve<BaseDataProviderManager>().LoadDataProvider()).As<IEfDataProvider>().InstancePerDependency();
if (masterDataSettingManager != null && masterProviderSettings.IsValid())
{
var efDataProviderManager = new EfDataProviderManager(masterDataSettingManager.LoadSettings());
var dataProvider = (IEfDataProvider)efDataProviderManager.LoadDataProvider();
dataProvider.InitConnectionFactory();
var dbProviderFactory = efDataProviderManager.LoadDbProviderFactories();
builder.Register<IDbContext>(c => new MyDbContext1(masterProviderSettings.DataConnectionString, dbProviderFactory)).InstancePerHttpRequest();
}
else
{
builder.Register<IDbContext>(c => new MyDbContext1(masterDataSettingManager.LoadSettings().DataConnectionString)).InstancePerHttpRequest();
}
}
//data layer
var dataSettingsManager = new DataSettingsManager(); …Run Code Online (Sandbox Code Playgroud)