如何存档自动注册但忽略任何已注册的类型?我引用了 Simple Injector 文档中的代码
var repositoryAssembly = typeof(SqlUserRepository).Assembly;
var registrations =
from type in repositoryAssembly.GetExportedTypes()
where type.Namespace == "MyComp.MyProd.BL.SqlRepositories"
where type.GetInterfaces().Any()
select new
{
Service = type.GetInterfaces().Single(),
Implementation = type
};
foreach (var reg in registrations)
{
// TODO: how to check reg.Service has already registered or not
container.Register(reg.Service, reg.Implementation, Lifestyle.Transient);
}
例如,我有接口(interface) ISampleRepository 并且在不同的程序集中有 2 个实现
- SampleRepository 在程序集“MyComp.MyProd.BL.SqlRepositories”中
- OverrideSampleRepository 在不同的地方
项目 1:成功
var container = new Container();
container.AutoRegistration();
项目2:异常,因为ISampleRepository已经注册
var container = new Container();
container.Register<ISampleRepository, OverrideSampleRepository>();
container.AutoRegistration();
最佳答案
文档 described如何覆盖现有注册。该文档包含以下示例:
var container = new Container();
container.Options.AllowOverridingRegistrations = true;
// Register IUserService.
container.Register<IUserService, FakeUserService>();
// Replaces the previous registration
container.Register<IUserService, RealUserService>();
但是请仔细阅读文档。
关于c# - 检查简单注入(inject)器是否已注册类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43998595/