如何在依赖项无法实例化时进行调试
本文关键字:实例化 调试 依赖 | 更新日期: 2023-09-27 18:27:23
当依赖性没有实例化时,如何调试依赖性注入(使用Unity DI)?
例如,给定一个具有依赖关系的服务类:
public class FooService : IFooService
{
[Dependency]
public BarService BarService { get; set; }
[Dependency]
public AnotherService AnotherService { get; set; }
// other code fails because BarService and AnotherService are null
}
在Global.asax.cs
private void ConfigureIoC()
{
container
.ConfigureAutoRegistration()
.LoadAssembliesFrom(assemblyPaths)
.ExcludeSystemAssemblies()
.Include(If.Any, Then.Register())
.ApplyAutoRegistration();
var serviceLocator = new UnityServiceLocator(container);
ServiceLocator.SetLocatorProvider(() => serviceLocator);
}
IFooService也由Unity实例化,但它使用了构造函数注入(并且有效):
public class FooController : Controller
{
private readonly IFooService _fooService;
public FooController(IFooService fooService)
{
_fooService = fooService;
}
}
我如何调试它以查看依赖项未能实例化的原因。没有抛出任何异常(或者如果抛出了异常,则Elmah不会捕获并记录它们)。
依赖项没有注入,因为DependencyAttribute
在具体类而不是接口上。
由于DI属性可能有害,我建议您将注册更改为
container.RegisterType<IFooService,FooService>(new InjectionProperty("BarService"), new InjectionProperty("AnotherService"));
然后解析IFooService
将返回具有注入的依赖关系的FooService
的实例。
调用container.Resolve<IFooService>();
IFooService的解决方案在哪里/如何进行?