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)
});