配置
我有:
(IMyRepository)
.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;
}抛出错误:
无法解析“IMyRepository”类型的服务,同时试图激活“MyController”。
除非。
在通过Scrutor注册存储库之后,我将
var test = typeof(IMyRepository);此时,一切都如预期的那样运作。但是,这完全违背了自动依赖注册的全部要点。
任何帮助都非常感谢。
发布于 2020-02-14 23:31:02
更改了注册方法以使用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);
});
}https://stackoverflow.com/questions/60227501
复制相似问题