小编Nig*_*888的帖子

jQuery Datepicker onchange事件问题

我有一个JS代码,当你更改字段时,它会调用一个搜索例程.问题是,当Datepicker更新输入字段时,我找不到任何会触发的jQuery事件.

出于某种原因,当Datepicker更新字段时,不会调用更改事件.当弹出日历时,它会改变焦点,所以我也不能使用它.有任何想法吗?

jquery datepicker

223
推荐指数
8
解决办法
49万
查看次数

相当于dotnet core/csproj中的AssemblyInfo

由于dotnet核心移回到.csproj格式,因此有一个新的自动生成MyProject.AssemblyInfo.cs,其中包含.

[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]
Run Code Online (Sandbox Code Playgroud)

请注意,每次构建时都会自动重新生成.以前该文件位于/ obj /目录中,现在它似乎只在内存中,因为在磁盘上找不到该文件并且单击错误消息不会打开任何文件.

这是错误消息: 在此输入图像描述

由于它们在那里定义,我无法在经典中定义它们AssemblyInfo.cs.

我在哪里/如何定义项目的公司和版本?

assemblyinfo visual-studio .net-core visual-studio-2017

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

ServiceLocator是反模式吗?

最近我读过Mark Seemann关于Service Locator反模式的文章.

作者指出ServiceLocator为反模式的两个主要原因:

  1. API使用问题(我完全可以使用)
    当类使用服务定位器时,很难看到它的依赖关系,因为在大多数情况下,类只有一个PARAMETERLESS构造函数.与ServiceLocator相比,DI方法通过构造函数的参数显式地暴露依赖关系,因此在IntelliSense中很容易看到依赖关系.

  2. 维护问题(让我感到困惑)
    请考虑以下示例

我们有一个使用服务定位器方法的类'MyType':

public class MyType
{
    public void MyMethod()
    {
        var dep1 = Locator.Resolve<IDep1>();
        dep1.DoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我们要为类'MyType'添加另一个依赖项

public class MyType
{
    public void MyMethod()
    {
        var dep1 = Locator.Resolve<IDep1>();
        dep1.DoSomething();

        // new dependency
        var dep2 = Locator.Resolve<IDep2>();
        dep2.DoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我的误解开始的地方.作者说:

要判断你是否引入了一个重大改变,要变得更加困难.您需要了解使用Service Locator的整个应用程序,并且编译器不会帮助您.

但是等一下,如果我们使用DI方法,我们将在构造函数中引入与另一个参数的依赖关系(在构造函数注入的情况下).问题仍然存在.如果我们忘记设置ServiceLocator,那么我们可能忘记在IoC容器中添加新的映射,并且DI方法将具有相同的运行时问题.

此外,作者还提到了单元测试的难点.但是,我们不会有DI方法的问题吗?我们不需要更新所有实例化该类的测试吗?我们将更新它们以传递一个新的模拟依赖项,以使我们的测试可编译.我没有看到更新和时间花费带来任何好处.

我不是想捍卫Service Locator方法.但这种误解让我觉得我失去了一些非常重要的东西.有人可以消除我的怀疑吗?

更新(摘要):

我的问题"服务定位器是反模式"的答案实际上取决于具体情况.我绝对不会建议你从工具列表中删除它.当您开始处理遗留代码时,它可能会变得非常方便.如果你很幸运能够处于项目的最初阶段,那么DI方法可能是更好的选择,因为它比Service Locator有一些优势.

以下是主要的不同之处,这些差异使我不相信我的新项目使用Service Locator:

  • 最明显和最重要的是:Service Locator隐藏了类依赖项
  • 如果你正在使用一些IoC容器,它可能会在启动时扫描所有构造函数以验证所有依赖项,并立即给你关于缺失映射(或错误配置)的反馈; 如果您将IoC容器用作服务定位器,则无法进行此操作

有关详细信息,请阅读下面给出的优秀答案.

design-patterns dependency-injection anti-patterns service-locator

127
推荐指数
4
解决办法
3万
查看次数

存储程序使用的一组常量的最佳方法是什么?

我有我的程序使用...各种常数string的,int的,double的,等...什么是存储它们的最好方法?我不认为我想要一个Enum,因为数据不是所有相同的类型,我想手动设置每个值.我应该把它们全部存放在一个空的课堂上吗?或者,还有更好的方法?

c# constants

93
推荐指数
4
解决办法
9万
查看次数

从OpenFileDialog路径/文件名中提取路径

我正在编写一个从选择文件开始的小实用程序,然后我需要选择一个文件夹.我想将文件夹默认为所选文件所在的位置.

OpenFileDialog.FileName返回完整的路径和文件名 - 我想要的只是获取路径部分(无文件名),所以我可以使用它作为初始选择的文件夹.

    private System.Windows.Forms.OpenFileDialog ofd;
    private System.Windows.Forms.FolderBrowserDialog fbd;
    ...
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        string sourceFile = ofd.FileName;
        string sourceFolder = ???;
    }
    ...
    fbd.SelectedPath = sourceFolder; // set initial fbd.ShowDialog() folder
    if (fbd.ShowDialog() == DialogResult.OK)
    {
       ...
    }
Run Code Online (Sandbox Code Playgroud)

有没有.NET方法可以做到这一点,还是我需要使用regex, split, trim,等?

.net c# parsing path

77
推荐指数
4
解决办法
24万
查看次数

如何将新(重写)历史记录推送到远程存储库

基本上,我有一个我想要修复的开放拉取请求,同时我想将包含2个功能的1个提交分成两个单独的提交.

Github存储库现在看起来像修复是一个新的分支:

master c-c-c
            \
     fix c-c-c-c
Run Code Online (Sandbox Code Playgroud)

我从修复中创建了一个pull请求.

我想将修复中的最后一次提交更改为本地存储库中的2次提交,如下所示:

master c-c-c
            \
     fix c-c-c-n-n
Run Code Online (Sandbox Code Playgroud)

其中nn是我的2个新提交.

为了在本地达到这一点,我这样做了:

1. git rebase -i HEAD~2
2. Changed my last commit line to "edit", saved and closed the file
3. git reset HEAD^
4. git stash save
5. Removed the changes I don't want in the first commit
6. git commit -m "commit a" -a
7. git stash apply
8. git commit -m "commit b"
Run Code Online (Sandbox Code Playgroud)

所以现在我按照我想要的方式进行了2次提交.问题是我发现了一个最终出现在pull请求中的错误.由于我已经推送到远程存储库,它不会接受我的新提交(因为原来的提交现在已经丢失).

我跑:

git push origin fix --dry-run
Run Code Online (Sandbox Code Playgroud)

我得到的消息是:

To git@github.com:<UserName>/<Repository>.git …
Run Code Online (Sandbox Code Playgroud)

git github

37
推荐指数
1
解决办法
3万
查看次数

使用DI和IoC的工厂方法

我熟悉这些模式,但仍然不知道如何处理以下情况:

public class CarFactory
{
     public CarFactory(Dep1,Dep2,Dep3,Dep4,Dep5,Dep6)
     {
     }

     public ICar CreateCar(type)
     {
            switch(type)
            {
               case A:
                   return new Car1(Dep1,Dep2,Dep3);
               break;

               case B:
                   return new Car2(Dep4,Dep5,Dep6);
               break;
            }
     }
}
Run Code Online (Sandbox Code Playgroud)

通常,问题在于需要注入的引用量.当有更多的汽车时会更糟.

我想到的第一种方法是在工厂构造函数中注入Car1和Car2,但它违反工厂方法,因为工厂将始终返回相同的对象.第二种方法是注入servicelocator,但它的反模式到处都是.怎么解决?

编辑:

替代方式1:

public class CarFactory
{
     public CarFactory(IContainer container)
     {
        _container = container;
     }

     public ICar CreateCar(type)
     {
            switch(type)
            {
               case A:
                   return _container.Resolve<ICar1>();
               break;

               case B:
                     return _container.Resolve<ICar2>();
               break;
            }
     }
}
Run Code Online (Sandbox Code Playgroud)

替代方式2(由于树中的依赖性过多而难以使用):

public class CarFactory
{
     public CarFactory()
     {
     }

     public ICar CreateCar(type)
     {
            switch(type)
            { …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection inversion-of-control factory-pattern

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

在C#中向xml文件添加元素

我有一个格式如下的XML文件:

<Snippets>
  <Snippet name="abc">
    <SnippetCode>
      testcode1
    </SnippetCode>
  </Snippet>

  <Snippet name="xyz">
    <SnippetCode>      
     testcode2
    </SnippetCode>
  </Snippet>

  ...

</Snippets>
Run Code Online (Sandbox Code Playgroud)

我可以使用XDocument成功加载元素,但是我在添加新元素时遇到了麻烦(有许多函数,我尝试过的大多数函数对我来说效果不好).怎么做?新元素将包含代码段名称标记和代码段代码标记.我以前的方法是打开文件,并使用字符串手动创建元素虽然有效,但这是一个非常糟糕的主意.

我尝试过的:

XDocument doc = XDocument.Load(spath);
XElement root = new XElement("Snippet");
root.Add(new XElement("name", "name goes here"));
root.Add(new XElement("SnippetCode", "SnippetCode"));
doc.Element("Snippets").Add(root);
doc.Save(spath);
Run Code Online (Sandbox Code Playgroud)

结果如下:

<Snippet>
    <name>name goes here</name>
    <SnippetCode>
    code goes here
    </SnippetCode>
</Snippet>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但名称标签生成不正确.它应该是

<Snippet name="abc"> 
Run Code Online (Sandbox Code Playgroud)

但我无法正确生成.

c# xml file

34
推荐指数
3
解决办法
10万
查看次数

如何在Visual Studio 2017中为特定目标框架运行单元测试?

我真的很喜欢这种新.csproj格式.它比可怕的(有限的)好得多project.json.

但是,有一件事我想解决.我已将我的(多个)测试项目合并到一个多目标项目中.

<TargetFrameworks>netcoreapp1.0;net40;net35</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

但是,在Visual Studio中的测试资源管理器中似乎没有任何工具来选择目标框架 - 它总是只运行第一个.我找到了一个解决方法 - 添加一个<TargetFramework>具有特定框架的元素......

<TargetFramework>net35</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法选择目标框架而不需要手工编辑MSBuild(.csproj)文件?我正在寻找GUI中的一些选项来执行此操作 - 特别是因此我不必记住编辑.csproj文件以便在调试测试之前切换框架或记住在发布之前必须删除此行.

.net c# multitargeting visual-studio visual-studio-2017

31
推荐指数
2
解决办法
1490
查看次数

尝试在.Net Standard项目中设置Entity Framework核心

我想知道我是否可以轻松地在.NET Standard 2.0项目中设置我的EntityFrameworkCore.我正在阅读本教程,但它需要.NET Core或Framework.

当我到达这一步时:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

启动项目'projectName'的目标是框架'.NETStandard'.没有与此框架关联的运行时,并且无法直接执行以其为目标的项目.要将Entity Framework核心软件包管理器控制台工具与此项目一起使用,请添加一个针对引用此项目的.NET Framework或.NET Core的可执行项目,并将其设置为启动项目; 或者,更新此项目以跨目标.NET Framework或.NET Core.

我想知道我是否可以在.NET Standard中设置我的实体,或者是否有我应该做的最佳实践?

c# entity-framework entity-framework-core .net-standard-2.0

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