- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在简单的 ASP.NET Core 2.0 WebAPI 应用程序中使用 KeyFilter 属性时遇到问题。
<PackageReference Include="Autofac" Version="4.6.1" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.2.0" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
程序.cs:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(services => services.AddAutofac())
.UseStartup<Startup>()
.Build();
}
启动.cs:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public IContainer ApplicationContainer { get; private set; }
// This method gets called by the runtime.
// Use this method to add services to the container.
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Autofac
var builder = new ContainerBuilder();
builder.Populate(services);
builder.RegisterType<ClassX1>()
.Keyed<IInterfaceX>("first")
.WithParameter("name", "X1")
.SingleInstance();
builder.RegisterType<ClassX1>()
.Keyed<IInterfaceX>("second")
.WithParameter("name", "X2")
.SingleInstance();
builder.RegisterType<ClassX1>()
.As<IInterfaceX>()
.WithParameter("name", "X3")
.SingleInstance();
builder.RegisterType<ValuesController>()
.WithAttributeFiltering();
ApplicationContainer = builder.Build();
return ApplicationContainer.Resolve<IServiceProvider>();
// return new AutofacServiceProvider(this.ApplicationContainer);
}
// This method gets called by the runtime.
// Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
ClassX1.cs:
public class ClassX1: IInterfaceX
{
public ClassX1(string name)
{
Name = name;
}
public string Name { get; }
}
IInterfaceX.cs:
public interface IInterfaceX
{
string Name { get; }
}
ValuesController.cs:
[Route("api/[controller]")]
public class ValuesController : Controller
{
private readonly IInterfaceX _x;
public ValuesController([KeyFilter("second")] IInterfaceX x)
{
_x = x;
}
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2", _x.Name };
}
}
调用“/api/values”产生 [“value1”,“value2”,“X3”]。但我希望 ["value1","value2","X2"].
如果我删除第三个注册(使用 X3)则
InvalidOperationException: Unable to resolve service for type 'WebApplicationAutofac.IInterfaceX' while attempting to activate 'WebApplicationAutofac.Controllers.ValuesController'.
尝试直接解析工作正确:
var temp = ApplicationContainer.ResolveKeyed<IInterfaceX>("second");
怎么了?
最佳答案
是的,它对 WebAPI Controller 非常有用。
解决方案是添加.AddControllersAsServices():
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddControllersAsServices();
关于c# - 在 ASP.NET Core 2.0 中使用 KeyFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45917583/
我有一个 p:inputMask与 p:keyFilter匹配 HH:MM如下: 但它不起作用,它接受来自 00:00 的所有值至 99:99 . 我该如何解决这个问题? 最佳答案 p
我正在使用 primeng 的 KeyFilter 模块,这是我的代码: 这是我的 typescript 代码: patternDecimal: RegExp = /^[0-9]+(\.[0-9]{
我可以为 p 输入文本输入数字和特殊字符。 如何限制只能接受数字的字段?在所有浏览器中? 浏览器 Chrome 版本 81.0.4044.113(64 位)- 只能在字段中输入数字 浏览器 I
我正在尝试使用 Autofac 配置来创建服务对象。 public class Service : IService { public Service([KeyFilter("eod"
我正在使用jquery-keyfilter屏蔽文本框输入的插件。但是,文本框是动态添加到页面的,我不知道如何将键过滤器应用于它们。 我已经尝试过 $('#myelement').live('keyfi
我在简单的 ASP.NET Core 2.0 WebAPI 应用程序中使用 KeyFilter 属性时遇到问题。 程序.cs: public class Program { public
我是一名优秀的程序员,十分优秀!