小编Ron*_*n C的帖子

.Net Core Service 容器,我能保证为接口注册最后一个服务吗?

使用默认的 Asp.net Core IoC 容器,我是否可以保证如果为一个接口注册了多个对象类型,并且我为该接口请求服务,IoC 将始终返回为该接口注册的最后一个对象类型?

(我通读了 .Net Core Dependency Injection 文档,它似乎没有解决这个问题 。https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection

示范

假设我有这个界面:

interface ITest
{

    void Create(int id);
}
Run Code Online (Sandbox Code Playgroud)

和这些课程:

public class TestOne: ITest {
    int id;
    public void Create(int id) {
        this.id = id;
    }
}

public class TestTwo: ITest {
    int id;
    public void Create(int id) {
        this.id = id;
    }
}


public class TestThree: ITest {
    int id;
    public void Create(int id) {
        this.id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在 Startup.cs 的ConfigureServices …

c# ioc-container asp.net-core-mvc .net-core

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

如何让Asp.Net Core路由引擎严格遵守指定的路由?

背景
出于 SEO 目的,同一页面不能有两个 url 很重要,否则 Google 会将其中一个页面视为具有“重复内容”,这将导致 Google 降低该页面在搜索引擎结果中的排名。

问题
在 Asp.Net Core 中,当使用基于属性的例程时,如下所示:

 public class ExampleController: Controller {

    [HttpGet]
    [Route("/example/")]
    public IActionResult Index() {
        return View();
    }     

} 
Run Code Online (Sandbox Code Playgroud)

此路由返回 index.cshtml 页面,以响应/example/ AND /example的 url 请求。但是,我只希望它响应我明确指定的路线,即/example/. 如果由于我不希望此操作方法响应而收到请求/example,则系统应该返回 404。

问题
我需要在全局级别做什么来强制路由引擎严格遵守指定的路由?

url seo routes asp.net-core

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

如何创建TagHelper谁的值是一个模型属性(不使用@Model)?

Tag Helper是Asp.Net Core的一个很好的功能.我创建了几个标记助手,它们可以提供超级帮助.

现在我想尝试一些更高级的东西.标记辅助属性具有以属性值是模型属性的方式创建的能力.

这方面的例子如下:

 //model
 public class MyModel{
      public int MyField {get;set;} = 10;
 }



  //in the view
  @model MyModel
   ...
  <input asp-for="MyField" />
Run Code Online (Sandbox Code Playgroud)

在上面的示例asp-for中,input标记定向的标记帮助程序引用模型中的属性.该文件说,

asp-for属性值是ModelExpression和lambda表达式的右侧.因此,asp-for ="Property1"在生成的代码中变为m => m.Property1,这就是为什么你不需要使用模型前缀的原因.

所以这很酷,并且相同的文档似乎称之为"表达式名称".

如何在我自己的自定义标记帮助器中创建这样的属性?

c# asp.net-core-mvc tag-helpers

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

如何让asp-for输入标签帮助器生成camelCase名称?

如果我有这样的视图模型:

 public class MyModel{
      public DateTime? StartDate {get;set;}
 }
Run Code Online (Sandbox Code Playgroud)

在视图上,输入标记与asp-for标记助手一起使用,如下所示:

<input asp-for="StartDate" />
Run Code Online (Sandbox Code Playgroud)

由此生成的默认html是

 <input type="datetime" id="StartDate" name="StartDate" value="" />
Run Code Online (Sandbox Code Playgroud)

但我希望它生成的是html,如下所示:

 <input type="datetime" id="startDate" name="startDate" value="" />
Run Code Online (Sandbox Code Playgroud)

如何让asp-for输入标签帮助器生成像上面这样的驼峰案例名称,不必使我的模型属性为camelCase?

html asp.net-core-mvc tag-helpers

5
推荐指数
2
解决办法
1512
查看次数

更新到.NET Core 1.0 RC2时应删除"/ Program Files/DNX /"吗?

这些说明https://www.microsoft.com/net/core#windows表示在Windows上安装.NET Core SDK 1.0 RC2之前,应通过"添加/删除程序"从Windows中删除所有以前版本的.NET Core.

但是,在从Windows 7中的"添加/删除程序"运行卸载并安装.NET Core SDK后,我发现我的/Program Files/DNX/文件夹仍然存在.

DNX文件夹

这让我想知道是否应该删除它以清理系统.但是,在使用DNX下使用RC1创建的旧项目时,可能需要它.

我想知道是否可以删除dnx文件夹及其相关的运行时?

asp.net-core-mvc .net-core asp.net-core

4
推荐指数
1
解决办法
347
查看次数

如何告诉控制器存在ASP.NET核心视图?

有时控制器需要检查视图是否存在,以便它可以采取一些操作,如果不存在?

我见过类似的问题,Asp.Net MVC中是否存在视图?对于asp.net mvc的早期版本,但这些方法不适用于ASP.NET Core.我无法从控制器内部找到有关如何使用ASP.NET Core的任何文档.

鉴于以下内容:

string viewLoc= "~/views/some-folder/some-file.cshtml";
Run Code Online (Sandbox Code Playgroud)

控制器如何确定视图是否存在?

asp.net-core-mvc

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

为什么 Microsoft.AspNetCore.Http.StatusCodes 不包含 422 无法处理的实体?

Microsoft.AspNetCore.Http.StatusCodes包含许多对于从控制器返回有用的状态代码常量,例如可以在控制器中像这样使用:

return StatusCode(StatusCodes.Status201Created);
Run Code Online (Sandbox Code Playgroud)

但奇怪的是,该类StatusCodes不包含 422 Unprocessable Entity 的值,至少在 Asp.Net Core 1.0.1 中没有。为什么不包含StatusCodes.Status422UnprocessableEntity

这个 http 状态代码是否已被我不知道的某些规范贬值?还是有其他原因导致 422 Unprocessable Entity 未包含在内?

asp.net-core-mvc

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

如何从.net核心IoC容器中删除默认服务?

.net核心的美丽之处之一是它非常模块化且可配置。

这种灵活性的一个关键方面是,它通常通过接口利用IoC来注册服务。从理论上讲,这可以用很少的精力用该服务的自定义实现替换默认的.net服务。

从理论上讲,这听起来很棒。但是我有一个实际的工作案例,我想用我自己的默认替换.net核心服务,但我不知道如何删除默认服务。

更具体地说,在Startup.cs ConfigureServices方法中,当services.AddSession()调用时,它将注册一个DistributedSessionStorevai以下代码:

 services.AddTransient<ISessionStore, DistributedSessionStore>();
Run Code Online (Sandbox Code Playgroud)

从源代码中可以看到:https : //github.com/aspnet/Session/blob/rel/1.1.0/src/Microsoft.AspNetCore.Session/SessionServiceCollectionExtensions.cs

我想用自己创建的ISessionStore替换它。因此,如果我有一个RonsSessionStore:ISessionStore要替换当前注册的ISessionStore的类,该怎么办?

我知道我可以ConfigureServices通过以下方法在Startup.cs 方法中注册ISessionStore :

 services.AddTransient<ISessionStore, RonsSessionStore>();
Run Code Online (Sandbox Code Playgroud)

但是,如何删除已经注册的DistributedSessionStore

我试图通过startup.cs ConfigureServices方法来完成此任务

 services.Remove(ServiceDescriptor.Transient<ISessionStore, DistributedSessionStore>());
Run Code Online (Sandbox Code Playgroud)

但它没有任何作用,并且DistributedSessionStore仍在IoC容器中。有任何想法吗?

如何ConfigureServices使用startup.cs方法从IoC删除服务?

c# ioc-container .net-core asp.net-core

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

如何获取特定版本的Jquery,ex 3.2.1的TypeScript定义文件?

我是TypeScript的新手,仍在努力解决这个问题.我有一个使用jquery版本3.2.1的示例visual studio项目,我想让我的项目可以使用TypeScript类型定义.

从互联网上看,这些类型定义的权威来源似乎是https://github.com/DefinitelyTyped/DefinitelyTyped

在那页上,我读到了

npm
这是首选方法.这仅适用于TypeScript 2.0+用户.例如:

npm install --save-dev @ types/node

所以看起来我只需要键入npm install --save-dev @types/jquery以获取通过npm下载的jquery类型定义文件.但后来我问自己,嗯,我想知道如果每个人都在键入相同的命令而不管jquery版本,那么类型定义文件将是什么版本的jquery.所以我去了npm网站检查,奇怪的是它说

这个软件包包含的jQuery 1.10.x /(类型定义http://jquery.com/).

然而,最后一次更新是"最后更新:星期六,2017年3月11日00:13:28 GMT".

所以这看起来很奇怪,为什么最近会有一个针对jquery 1.10.x的npm模块的更新?为什么npm的jquery类型def的最新版本是针对这样一个旧版本的jquery?2.0也许只有1.10.x?所以我猜测也许这些类型的defs是最新的和最好的,谁维护npm包只是不更新​​摘要?但我怎么能证实呢?我下载了模块,并试图从类型defs的jquery版本中辨别出但是无法确定.

所以这是我的问题.一个人如何获得特定版本的Jquery,ex 3.2.1的TypeScript定义文件?

jquery visual-studio npm typescript typescript-typings

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

如何在 Visual Studio 2022 C# 编辑器中取消粗体静态方法?

在 Visual Studio 2022 中,静态类名、静态方法和静态属性默认为粗体。例如,请参见此屏幕截图,静态方法GetRequired以及InTestMode静态属性和AppConfig静态类均以粗体显示:

在此输入图像描述

我希望他们都不要大胆。但让我们暂时关注一下静态方法。我知道我可以进入Tools> Options> Environment>Fonts and Colors并更改各种文本元素的颜色配置,包括粗体。但是我找不到控制静态代码元素粗体的“显示项”。我已取消选中以“用户成员 - ”开头的所有“显示项目”的粗体,包括“用户成员 - 方法”的项目(如下所示)

在此输入图像描述

但是,我在 C# 编辑器中仍然看到静态方法以粗体显示。哪一个“显示项目”是控制这种大胆处理的那个?或者有什么不同的方法来关闭这种大胆的治疗方法?

c# visual-studio visual-studio-2022

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