我创建了一个自定义WPF用户控件,供第三方使用.我的控件有一个一次性的私有成员,我想确保一旦包含窗口/应用程序关闭,它的dispose方法将始终被调用.但是,UserControl不是一次性的.我尝试实现IDisposable接口并订阅Unloaded事件,但在主机应用程序关闭时都不会被调用.如果可能的话,我不想依赖我控制的消费者记住调用特定的Dispose方法.
public partial class MyWpfControl : UserControl
{
SomeDisposableObject x;
// where does this code go?
void Somewhere()
{
if (x != null)
{
x.Dispose();
x = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我找到的唯一解决方案是订阅Dispatcher的ShutdownStarted事件.这是一种合理的方法吗?
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的WPF应用程序,我在其中使用数据绑定来允许编辑一些自定义CLR对象.我现在想要在用户单击保存时输入一些输入验证.但是,我读过的所有WPF书籍并没有真正为这个问题投入任何空间.我看到你可以创建自定义ValidationRules,但我想知道这对我的需求是否有点过分.
所以我的问题是:是否有一个很好的示例应用程序或文章,它演示了在WPF中验证用户输入的最佳实践?
当我双击VS2010中的错误列表或查找结果列表中的条目时,它会将新打开的源代码文件停靠在我所有其他源文件所在的大窗口中,但是在底部的小窄窗口中,以及错误列表等
默认情况下,如何让它与其他人一起提出?
如果我双击解决方案资源管理器中的项目,它会将其放在正确的位置
假设我在Python单元测试中有以下代码:
aw = aps.Request("nv1")
aw2 = aps.Request("nv2", aw)
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以断言aw.Clear()在测试的第二行中调用了一个特定的方法(在我的例子中)?例如,有这样的事情:
#pseudocode:
assertMethodIsCalled(aw.Clear, lambda: aps.Request("nv2", aw))
Run Code Online (Sandbox Code Playgroud) 我知道我在这里很懒,我应该为自己搜索头文件,但是LPARAM和WPARAM参数的实际类型是什么?它们是指针还是四个字节的整数?我正在做一些C#interop代码,并希望确保我在x64系统上运行它.
我正在开发一个ASP.NET MVC网站,我想在Azure网站上托管.在开发过程中,我一直在App_Data目录中使用MDF文件,其连接字符串如下所示:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MyApp;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MyApp.mdf;MultipleActiveResultSets=true" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
要在Azure上试用它,我希望我可以保留这个连接字符串,并简单地将我的MyApp.mdf FTP到Azure上的App_Data文件夹,因为它全部设置了我想要使用的示例数据.但是,当我尝试访问我的网站时,我遇到了以下错误:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供程序:SQL网络接口,错误:52 - 无法找到LocalDB安装.验证是否已正确安装SQL Server Express并且已启用LocalDB功能.)
我的问题是,有没有办法可以运行我的Azure网站连接到我的App_Data文件夹中的MDF文件,还是我被迫使用Azure SQL数据库?
我们正在尝试遵循TFS分支指南中的分支策略,并且已经达到了我们已经创建了代表发布的分支的程度,现在应该将其设置为只读.
在分支的"属性"|"安全"选项卡中,它显示六个用户组,每个用户组具有除"读取"以外的10个权限 我是否必须通过并在60个复选框上单击"拒绝",或者是否有更好的方法将此分支设为只读?
我想问一个关于如何处理简单的面向对象设计问题的问题.我对自己处理这种情况的最佳方法有一些想法,但我有兴趣听听Stack Overflow社区的一些意见.还赞赏相关在线文章的链接.我正在使用C#,但问题不是语言特定的.
假设我写一个视频商店应用程序,其数据库中有一个Person表,其中PersonId,Name,DateOfBirth和Address领域.它还有一个Staff表,其中包含指向a的链接PersonId,以及一个Customer也链接到的表PersonId.
一个简单的面向对象的方法是说Customer"是一个" Person,因此创建类有点像这样:
class Person {
public int PersonId { get; set; }
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
public string Address { get; set; }
}
class Customer : Person {
public int CustomerId { get; set; }
public DateTime JoinedDate { get; set; }
}
class Staff …Run Code Online (Sandbox Code Playgroud) 我一直在研究.NET的各种依赖注入框架,因为我觉得我正在开发的项目将从中受益匪浅.虽然我认为我已经很好地掌握了这些框架的功能,但我仍然不清楚如何最好地将它们引入大型系统.大多数演示(可以理解)往往是具有一个或两个依赖关系的非常简单的类.
我有三个问题......
首先,您如何处理那些常见但无趣的依赖关系,例如ILog,IApplicationSettings,IPermissions,IAudit.对于每个类来说,在构造函数中将这些作为参数似乎有点过分了.在需要时使用DI容器的静态实例来获取它们会更好吗?
MyClass(ILog log, IAudit audit, IPermissions permissions, IApplicationSettings settings)
// ... versus ...
ILog log = DIContainer.Get<ILog>();
Run Code Online (Sandbox Code Playgroud)
其次,如何处理可能使用的依赖项,但创建起来可能很昂贵.示例 - 类可能依赖于ICDBurner接口,但不希望创建具体实现,除非实际使用了CD刻录功能.您是否在构造函数中将接口传递给工厂(例如ICDBurnerFactory),或者您是否再次采用静态方式直接获取DI Container并在需要时询问它?
第三,假设您有一个大型Windows窗体应用程序,其中顶级GUI组件(例如MainForm)可能是数百个子面板或模态窗体的父级,每个子面板或模式窗体可能具有多个依赖关系.这是否意味着应该将MainForm设置为具有其子项的所有依赖项的超集作为依赖项?如果你这样做了,最终是否会创建一个巨大的自我膨胀怪物来构建你创建MainForm时可能需要的每一个类,在这个过程中浪费时间和记忆?
这篇来自David Haydn的有用文章(编辑:删除了骗局链接,可能是本文)展示了如何使用InjectionConstructor该类来帮助您使用Unity的装饰器模式来设置链.但是,如果装饰器链中的项目在其构造函数中具有其他参数,则InjectionConstructor必须显式声明它们中的每一个(或者Unity将抱怨它找不到正确的构造函数).这意味着您不能简单地将新的构造函数参数添加到装饰器链中的项目,而无需更新Unity配置代码.
这里有一些示例代码来解释我的意思.所述ProductRepository类首先被缠绕CachingProductRepository,然后通过LoggingProductRepostiory.除了在构造函数中使用IProductRepository之外,CachingProductRepository和LoggingProductRepository都需要来自容器的其他接口.
public class Product
{
public int Id;
public string Name;
}
public interface IDatabaseConnection { }
public interface ICacheProvider
{
object GetFromCache(string key);
void AddToCache(string key, object value);
}
public interface ILogger
{
void Log(string message, params object[] args);
}
public interface IProductRepository
{
Product GetById(int id);
}
class ProductRepository : IProductRepository
{
public ProductRepository(IDatabaseConnection db)
{
}
public Product GetById(int id)
{
return new …Run Code Online (Sandbox Code Playgroud) c# ×3
.net ×2
wpf ×2
asp.net-mvc ×1
azure ×1
branch ×1
c++ ×1
composition ×1
data-binding ×1
decorator ×1
dispose ×1
inheritance ×1
oop ×1
python ×1
tfs ×1
unit-testing ×1
validation ×1
windows ×1