配置
我有 :
- 一个 .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);
此时一切都按预期工作。但这破坏了自动依赖注册的全部意义。
非常感谢任何帮助。