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

时间:2012-03-09 01:18:01

标签: c# debugging dependency-injection unity-container

当依赖性没有实例化时,如何调试依赖注入(使用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没有捕获并记录它们)。

2 个答案:

答案 0 :(得分:2)

致电container.Resolve<IFooService>();

IFooService的解决方案在哪里/如何发生?

答案 1 :(得分:2)

不会注入依赖项,因为DependencyAttribute在具体类而不是接口上。

作为DI属性can be harmful我建议您将注册更改为

container.RegisterType<IFooService,FooService>(new InjectionProperty("BarService"), new InjectionProperty("AnotherService"));

然后,解析IFooService将返回带有注入依赖项的FooService实例。