繁体   English   中英

无法解析通过程序集扫描注册的服务

[英]Unable to resolve service registered via assembly scanning

配置

我有 :

  • .net 核心 MVC 应用程序项目
  • 一个模块项目包含
    • 一个控制器(MyController),
    • 存储库接口 (IMyRepository)
    • 一个存储库(实现 IMyRepository 和 IRepository 的 MyRepository)

.net 核心应用程序引用模块项目

我在 MVC 应用程序中使用了 Scrutor 来获取在任何引用的项目中实现IRepositoy所有类,并将它们注册到服务集合中:

public static void RegisterAllTypes<T>(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Scoped)
{

    var entryAssembly = Assembly.GetEntryAssembly();
    var referencedAssemblies = entryAssembly.GetReferencedAssemblies().Select(Assembly.Load);
    var assemblies = new List<Assembly> { entryAssembly }.Concat(referencedAssemblies).ToArray();

    services.Scan(
        x =>
        {
            x.FromAssemblies(assemblies)
                .AddClasses(classes => classes.AssignableTo(typeof(T)))
                    .AsImplementedInterfaces()

                .WithLifetime(lifetime);
    });
}

问题

如果我检查服务集合,我可以看到IMyRepository已注册并且应该解析为MyRepository 但是,将存储库注入MyController 时,如下所示:

private readonly IMyRepository _myRepository ;

public MyController(IMyRepository myRepository )
{
    _myRepository = myRepository;
}

抛出错误:

尝试激活“MyController”时无法解析“IMyRepository”类型的服务。

除非...

通过Scrutor注册存储库后,我把

var test = typeof(IMyRepository);

此时一切都按预期工作。 但这违背了自动依赖注册的全部意义。

非常感谢任何帮助。

将注册方法更改为使用FromApplicationDependencies() ,现在一切似乎都没问题

public static void RegisterAllTypes<T>(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Scoped)
{
    services.Scan(
        x =>
        {
            x.FromApplicationDependencies()
                .AddClasses(classes => classes.AssignableTo(typeof(T)))
                    .AsImplementedInterfaces()
                    .WithLifetime(lifetime);
        });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM