如何在依赖项无法实例化时进行调试

本文关键字:实例化 调试 依赖 | 更新日期: 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的解决方案在哪里/如何进行?