Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 注册收藏时是否覆盖生活方式?_C#_Dependency Injection_Ioc Container_Simple Injector - Fatal编程技术网

C# 注册收藏时是否覆盖生活方式?

C# 注册收藏时是否覆盖生活方式?,c#,dependency-injection,ioc-container,simple-injector,C#,Dependency Injection,Ioc Container,Simple Injector,我有一个配置,需要注册两个控制器,它们只是: public class DataApiController : ApiController { readonly Data _data; readonly MongoRepo _mongoRepo; readonly JobManager _jobManager; readonly QueueManager _queueManager; public DataApiController(QueueManag

我有一个配置,需要注册两个控制器,它们只是:

public class DataApiController : ApiController
{
    readonly Data _data;
    readonly MongoRepo _mongoRepo;
    readonly JobManager _jobManager;
    readonly QueueManager _queueManager;

    public DataApiController(QueueManager queueManager, 
        MongoRepo mongoRepo, JobManager jobManager, Data data)
    {
        _queueManager = queueManager;
        _mongoRepo = mongoRepo;
        _jobManager = jobManager;
        _data = data;
    }

    ...           
}
另一个也使用
ApiController
。我需要将它们注册为一个集合,我正在这样做:

var types = new[] { typeof(DataApiController), typeof(BatchApiController) };
container.RegisterCollection<ApiController>(
    from type in types
    select Lifestyle.Transient.CreateRegistration(type, container));

集合的错误抑制是否没有覆盖?我无法得到任何抑制诊断警告的工作,就像在验证容器时忽略了它一样,我总是得到关于瞬态和
IDisposable
的错误/警告。我如何注册一个集合并让容器知道我得到了它并且需要抑制错误?使用上面的
RegisterDisposableTransient
注册单个API控制器可以很好地工作,但是由于一个服务上有两个实现,我需要使用集合

只要执行以下操作,一切都会正常进行:

container.RegisterWebApiControllers(GlobalConfiguration.Configuration);

container.RegisterCollection<ApiController>(new[] {
    typeof(DataApiController), typeof(BatchApiController)
});

如何解析控制器集合?对我来说,解决这个问题的方法(在尝试了太多小时之后)实际上是我注册所有内容的顺序。我正在构建容器并添加注册,包括集合,然后注册WebApi控制器。我有一个想法,注册就行了,但这绝对不是直觉。非常感谢。
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);

container.RegisterCollection<ApiController>(new[] {
    typeof(DataApiController), typeof(BatchApiController)
});
var r1 = Lifestyle.Transient.CreateRegistration<DataApiController>(container);
r1.SuppressDiagnosticWarning(DiagnosticType.DisposableTransientComponent, 
    "done by web api");

container.AddRegistration(typeof(DataApiController), r1);

var r2 = Lifestyle.Transient.CreateRegistration<BatchApiController>(container);
r2.SuppressDiagnosticWarning(DiagnosticType.DisposableTransientComponent, 
    "done by web api");

container.AddRegistration(typeof(BatchApiController), r2);

container.RegisterCollection<ApiController>(new[] {
    typeof(DataApiController), typeof(BatchApiController)
});