不使用单一实例的Web API控制器中的注入

时间:2019-06-27 16:35:06

标签: c# autofac autofac-configuration autofac-module

我有一个在容器中注册为单个实例的服务

public class MyModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<MyService>()
            .As<IMyService>()
            .SingleInstance();

    }
}

容器如下创建

 public static IContainer SetupContainer()
 {
     var builder = new ContainerBuilder();
     var moduleTypes = TypeCache.GetTypes(x => x.IsClassEx() && !x.IsAbstractEx() && x.ImplementsInterfaceEx<IModule>());

     foreach (var moduleType in moduleTypes)
     {
        if (Activator.CreateInstance(moduleType) is IModule module)
           builder.RegisterModule(module);
     }

     var assemblies = AppDomain.CurrentDomain.GetAssemblies();
     builder.RegisterAssemblyModules(assemblies);

     var result = builder.Build();
     return result;
  }

这一切都可以在普通代码中完美地进行-我可以注入我的服务,并按我的期望进行解析

但是,当我尝试将服务注入Web api控制器时,该服务再次被解析,但是Autofac给了我服务的新实例

如何防止此行为,以便注入最初创建的实例?

1 个答案:

答案 0 :(得分:0)

我认为您在这里所缺少的是,您实际上并没有在正确的位置解析容器,因此根据您使用的集成类型,您可以执行以下操作之一。

    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.1.7</version>
    </dependency>

MVC Example OWIN Implementation