我有以下课程:
public interface IServiceA
{
string MethodA1();
}
public interface IServiceB
{
string MethodB1();
}
public class ServiceA : IServiceA
{
public IServiceB serviceB;
public string MethodA1()
{
return "MethodA1() " +serviceB.MethodB1();
}
}
public class ServiceB : IServiceB
{
public string MethodB1()
{
return "MethodB1() ";
}
}
我使用Unity for IoC,我的注册看起来像这样:
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>();
当我解析ServiceA
个实例时,serviceB
将为null
。
我该如何解决这个问题?
答案 0 :(得分:16)
这里至少有两个选项:
你可以/应该使用构造函数注入,因为你需要一个构造函数:
public class ServiceA : IServiceA
{
private IServiceB serviceB;
public ServiceA(IServiceB serviceB)
{
this.serviceB = serviceB;
}
public string MethodA1()
{
return "MethodA1() " +serviceB.MethodB1();
}
}
或者Unity支持属性注入,因为你需要一个属性和DependencyAttribute
:
public class ServiceA : IServiceA
{
[Dependency]
public IServiceB ServiceB { get; set; };
public string MethodA1()
{
return "MethodA1() " +serviceB.MethodB1();
}
}
MSDN网站What Does Unity Do?是Unity的良好起点。