我有以下控制台程序。但是,属性服务为空,并且以下代码块中的最后一行会引发异常。我错过了什么?使用Unity初始化属性
class Program
{
static void Main(string[] args)
{
container = new UnityContainer();
container.RegisterType<Service.IService, Service.Service>();
container.RegisterType<IC1, C1>();
container.Resolve<Service.IService>();
// var c1 = container.Resolve<IC1>();
c1.Run();
}
[Depenency] C1 c1 { get; set; }
}
public class C1
{
[Depenency] Service.IService service { get; set; }
public void Run()
{
var s = service.GetSomething(); // service is null
你为什么要container.Resolve()的额外调用;在那里?你正在创建一个对象,只是为了抛出它。你不需要这样做,当你解决IC1时,容器会自动做正确的事情 - 一旦你的财产是公开的,就是这样。 –
@ChrisTavares我已经更新了这个问题。还有什么我应该改变的更好的做法? – ca9163d9
嗯,现在代码根本就不会运行,因为你没有解决,甚至不再声明变量c1,而且你也没有解析程序的一个实例,所以依赖于c1不会得到ST。所以现在你有两个未解决的属性,而不是一个。 –