我正在try 注册我创建的一些端点,然而,Autofac抛出了一个异常,说我还没有注册我的BControl类.这是我的注册码:

    builder.RegisterType<GControlEndpoint>().As<IBusConsumer>().SingleInstance();
    builder.RegisterType<BControlEndpoint>().As<IBusConsumer>().SingleInstance();

    builder.RegisterType<BSControlEndpoint>().As<IBusConsumer>().SingleInstance()
      .WithParameter((pi, c) => pi.Name == "bControlEndpoint",
        (pi, c) => c.Resolve<BControlEndpoint>())
      .WithParameter((pi, c) => pi.Name == "gControlEndpoint",
        (pi, c) => c.Resolve<GControlEndpoint>());

我的BSControlEndpoint代码如下:

  private BControlEndpoint bControlEndpoint;
  private GControlEndpoint gControlEndpoint;

  public BSControlEndpoint(
    BControlEndpoint bControlEndpoint,
    GControlEndpoint gControlEndpoint)
  {
    this.bControlEndpoint = bControlEndpoint;
    this.gControlEndpoint = gControlEndpoint;
  }

任何帮助都将不胜感激.

Autofac错误为:

Autofac.Core.Registration.ComponentNotRegisteredException: The requested service 'Sa.BControlEndpoint' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.

推荐答案

在依赖项的注册定义上加上AsSelf:

builder.RegisterType<GControlEndpoint>()
   .As<IBusConsumer>()
   .AsSelf()
   .SingleInstance();

builder.RegisterType<BControlEndpoint>()
    .As<IBusConsumer>()
    .AsSelf()
    .SingleInstance();

此外,这应该会使WithParameter呼叫不再需要:

builder.RegisterType<BSControlEndpoint>().As<IBusConsumer>().SingleInstance();

另一种 Select 是查看键控依赖项注册(docs)

Csharp相关问答推荐

System.文本.Json现在总是需要无参数构造函数吗?

获取Windows和Linux上的下载文件夹

我应该将新的httpReportMessage()包装在using声明中吗?

List T.AddRange在传递ConcurrentDictionary作为参数时引发ArgumentExcellent

ASP.NET MVC购物车数量更新并从购物车中删除项目

获取ASP.NET核心身份认证cookie名称

有没有一种方法可以防止在编译时在MicrosoftC或非单线程上下文中调用方法?

找不到网址:https://localhost:7002/Category/Add?区域= Admin.为什么我的URL是这样生成的?area = Admin而不是/Admin/

NumPy s fftn in C#with pythonnet'

如何注册实现同一接口的多个服务并注入到控制器构造函数中

如何在C#中将对象[*,*]直接转换为字符串[*,*]?

在C#中使用类中的对象值

由于POST中的应用程序/JWT,出现不支持的内容类型异常

调用Task.Run()与DoSomethingAsync()有什么不同?

集合表达式没有目标类型

用C#从XML内部元素中获取特定值

未显示详细信息的弹出对话框

序列化过程中的死循环

数据库操作预计影响1行,但实际影响0行; after _dbContext.SaveChanges();

除非首先访问使用的终结点,否则本地API上的终结点不起作用