[英]Unable to resolve service registered via assembly scanning
配置
我有 :
.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.