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