小编Bla*_*ell的帖子

如何确定最终将与Web应用程序共享代码的.NET客户端应用程序的正确设计模式?

我是设计模式的新手,但我在去年一直在努力实施.我从一个新组织开始,所有代码都包含在表单中.自从我来到这里以来,我一直在尝试为我们的.NET 2.0应用程序使用MVC方法.

其他开发人员已经开始看到这种方法的必要性,我们正在达到一个我们希望就我们都将遵循的设计模式达成一致的程度.虽然我一直在努力学习,但我不确定哪种模式最适合实施.以下是我们的一些设计约束:

  1. 具有存储在同步到Oracle数据库的Access数据库中的本地数据的客户端应用程序(需要支持断开连接的用户)
  2. 客户端应用程序功能也将在未来一年内提供给Web
  3. .NET 2.0环境将在明年升级到3.5或4.o

如果您有其他问题,请与我们联系.我感谢您的帮助.

谢谢!

.net architecture design-patterns

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

使用全局Web API过滤器属性的Unity依赖注入

参考此CodePlex统一文章,我能够使用WebAPI控制器获取过滤器属性,如下所示:

[MyFilterAttribute]
public class TestController : ApiController
{}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想在使用GlobalConfiguration的所有操作中应用我的filter属性,它将被剥离注入的依赖项:

public class MyFilterAttribute : ActionFilterAttribute 
{
    [Dependency]
    public MyDependency { get; set; }

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
         if (this.MyDependency == null) //ALWAYS NULL ON GLOBAL CONFIGURATIONS
             throw new Exception();
    }
 }

public static class UnityWebApiActivator
    {
        public static void Start() 
        {
            var resolver = new UnityDependencyResolver(UnityConfig.GetConfiguredContainer());

            GlobalConfiguration.Configuration.DependencyResolver = resolver;

            GlobalConfiguration.Configuration.Filters.Add(new MyFilterAttribute());

            RegisterFilterProviders();
        }

        private static void RegisterFilterProviders()
        {
            var providers =
                GlobalConfiguration.Configuration.Services.GetFilterProviders().ToList();

            GlobalConfiguration.Configuration.Services.Add(
                typeof(System.Web.Http.Filters.IFilterProvider),
                new UnityActionFilterProvider(UnityConfig.GetConfiguredContainer()));

            var …
Run Code Online (Sandbox Code Playgroud)

c# unity-container asp.net-web-api

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

验证方法的方法名称中的前缀"是"

我最近一直在阅读Code Complete,基于这里和朋友的许多参考资料,并为社区提出了一个命名问题.是否应该在确定事件是否成功的布尔方法上使用前缀"Is"?这是我尝试的两种不同命名方案的代码示例:

migrationSuccessful = CopyData();
if (VerifyCopyData())
   migrationSuccessful = CleanupData();
Run Code Online (Sandbox Code Playgroud)

与:

migrationSuccessful = CopyData();
if (IsDataCopied())
   migrationSuccessful = CleanupData();
Run Code Online (Sandbox Code Playgroud)

注意VerifyCopyData和IsDataCopied之间的区别.对我来说,IsDataCopied更有意义,并使代码以更具描述性的模式流动.

谢谢你的想法!

编辑:基于一些评论,我想我会澄清IsDataCopied方法的作用.它遍历多个目录和文件,并确保源和目标目录/文件匹配.

naming-conventions

6
推荐指数
2
解决办法
1445
查看次数

递归是确定目录中最大文件大小的最佳选择

我编写了以下方法来确定最大文件大小:

    public static long GetMaxFileSize(string dirPath, long maxFileSize)
    {
        DirectoryInfo [] dirInfos = new DirectoryInfo(dirPath).GetDirectories();
        foreach (DirectoryInfo dirInfo in dirInfos)
        {
            DirectoryInfo [] subDirInfos = dirInfo.GetDirectories();
            foreach (DirectoryInfo subDirInfo in subDirInfos)
                maxFileSize = GetMaxFileSize(dirInfo.FullName, maxFileSize);

            FileInfo [] fileInfos = dirInfo.GetFiles();
            foreach (FileInfo fileInfo in fileInfos)
            {
                if (maxFileSize < fileInfo.Length)
                    maxFileSize = fileInfo.Length;
            }
        }

        return maxFileSize;
    }
Run Code Online (Sandbox Code Playgroud)

代码完成建议"有选择地使用递归".既然如此,我想知道社区是否认为这是递归的有效用法.如果没有,是否有更好的技巧?

编辑:我不能使用LINQ,因为它在.NET 2.0中不可用,但我不想将其标记为.NET 2.0问题,只是为了进一步讨论点,如下面的Jared.

编辑: 根据未获取根目录文件时发现的问题清理代码.

   public static long GetMaxFileSize(DirectoryInfo dirInfo, long maxFileSize)
   {
       DirectoryInfo [] subDirInfos = dirInfo.GetDirectories();
       foreach …
Run Code Online (Sandbox Code Playgroud)

c#

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

.NET代码签名定价

我正在寻找代码签署我们公司的应用程序的选项,似乎有几个不同的提供商,如:

每个供应商是否有利弊,或者它们基本相同,我应该使用价格最便宜的那个?我的最终目标是将我的应用程序称为可信提供商,以便我们可以在没有UAC提示的情况下进行独立的用户更新.

注意:我知道StackOverflow上已有关于代码签名选项的问题,但我相信这个问题有点不同.

编辑:扩展的选项列表,如下面的评论中所述.

.net code-signing

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

在实体框架中向实体添加或条件

你能在实体框架中为实体添加"或"条件吗?例如:

Property1 ==(1或2或3)

将值设置为"1 || 2 || 3"或"1,2,3"或"1或2或3"时收到的消息将返回以下消息:

condition is not compatible with the type of the member
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-4

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

断开与MS Access数据库的所有打开连接

我需要在Access数据库上执行压缩和修复操作.为此,需要关闭与数据库的所有打开连接.不幸的是,有一些开放的连接,我不能总是正确地追踪和关闭.有没有办法通过代码断开所有打开的连接?

c# ms-access

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

构造函数中的事件处理程序 - 是可能的还是明智的?

我有一个对象可以从一瞬间到几分钟进行初始化.原因是构造函数从Web服务检索数据,可能是几千字节到几兆字节,并且根据用户的连接速度,性能可能会有很大差异.出于这个原因,我想把事件放在那将处理进度通知.

这是我的问题:我可以在构造函数中放置事件处理程序,还是应该使用Load方法执行此类操作?

例如:

public class MyObject
{    
 public event EventHandler<UpdateLoadProgressEventArgs> UpdateLoadProgress;    

 public MyObject(int id)
 {
   Background worker bgWorker = new BackgroundWorker();
   bgWorker.DoWork += delegate(object s, DoWorkEventArgs args)
   {
        //load data and update progress incrementally
        UpdateLoadProgress(this, new UpadteLoadProgressEventArgs(progressValue));

        Result = someValue;         
   }
   bgWorker.RunWorkAsync();

 } 

 public int Result
 {
  get;
  set;
 }

} 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将事件处理程序绑定到构造函数时,它们在被调用时始终为null:

MyObject o = new MyObject(1);
o.UpdateLoadProgress += new EventHandler<EventArgs>(o_UpdateLoadProgress);
Run Code Online (Sandbox Code Playgroud)

我认为这是因为我在构造函数之后连接了事件.我看到的唯一选择是创建一个Load方法来完成构造函数的工作.缺点是任何使用此类的人必须知道在尝试访问Result(或任何其他属性)之前调用Load.

编辑: 这是最终的解决方案:

MyObjectBuilder类

public class MyObjectBuilder
    {
        public event ProgressChangedEventHandler ProgressChanged;

        public MyObject CreateMyObject()
        {
            MyObject o = …
Run Code Online (Sandbox Code Playgroud)

.net

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

如何使用指令在控制器上的元素上切换幻灯片动画?

我对以下情况感到困惑.假设我有一个带行的表.当用户单击表中的按钮时,我希望用户表单向下滑动jQuery并显示包含所选行值的表单.以下是我目前正在做的事情,这没有多大意义:

视图

<tr ng-click="setItemToEdit(item)" slide-down-form>
Run Code Online (Sandbox Code Playgroud)

...

<form>
   <input type="test" ng-model={{itemToEdit.Property1}} >
   <button ng-click=saveEditedItem(item)" slide-up-form>
<form>
Run Code Online (Sandbox Code Playgroud)

控制

$scope.itemToEdit = {};

$scope.setItemToEdit = function(item) {
    $scope.itemToEdit = item;
});

$scope.saveEditedItem = function(item) {
   myService.add(item);
   $scope.itemToEdit = {};
}
Run Code Online (Sandbox Code Playgroud)

指令 - 上滑/下滑

var linker = function(scope, element, attrs) {
    $(form).slideUp(); //or slide down           
}
Run Code Online (Sandbox Code Playgroud)

似乎我的指令和我的控制逻辑太过断开了.例如,如果存在保存错误会发生什么?表单已隐藏,因为slideUp事件已完成.在这种情况下,我很可能想要阻止slideUp操作.

我只使用AngularJS大约一个星期,所以我确信有些东西我不见了.

angularjs

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

为Powershell模块添加Powershell管理单元并多次导入

我想对正在构建的自定义Powershell Commandlet使用SqlServerCmdletSnapin。如果将以下代码添加到PSM1的开头:

if ( (Get-PSSnapin -Name sqlserverprovidersnapin100 -ErrorAction SilentlyContinue) -eq $null )
{
    Add-PsSnapin sqlserverprovidersnapin100
}

if ( (Get-PSSnapin -Name sqlservercmdletsnapin100 -ErrorAction SilentlyContinue) -eq $null )
{
    Add-PsSnapin sqlservercmdletsnapin100
}
Export-ModuleMember Invoke-SqlCmd
Run Code Online (Sandbox Code Playgroud)

第一次运行时一切正常:

导入模块MyModule-强制

但是,我第二次运行:

导入模块MyModule-强制

我收到以下错误:

Add-PsSnapin:已经添加了具有相同密钥的项目。

而且我的代码无法再调用Invoke-SqlCmd。将Powershell管理单元添加到自定义模块的最佳方法是什么?

powershell cmdlets pssnapin

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