c# - 检查简单注入(inject)器是否已注册类型

标签 c# simple-injector

如何存档自动注册但忽略任何已注册的类型?我引用了 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 个实现

  1. SampleRepository 在程序集“MyComp.MyProd.BL.SqlRepositories”中
  2. 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/

相关文章:

c# - .NET 程序最快的 IPC 方法是什么?

c# - 按键比较两个字典以获得匹配键的值

c# - 带有附加依赖的简单注入(inject)器装饰

c# - SimpleInjector 可以在运行时为泛型类型注册一个初始值设定项吗?

asp.net-mvc - 如何使用简单注入(inject)器装饰 ASP.NET MVC Controller

.net - 简单的注入(inject)器 : how to inject HttpContext?

c# - 使用 C# 在磁盘上查找所有 exe 文件的最有效方法?

c# - 管理 AmazonDynamoDBClient

c# - 整个工具提示的背景色

c# - 为什么 C# WPF 按钮绑定(bind)命令在使用简单注入(inject)器后不会更改 View ?