使用Unity初始化属性

时间:2012-12-03 21:21:13

标签: c# inversion-of-control unity-container

我有以下控制台程序。但是,属性服务为null,并且以下代码块中的最后一行引发异常。我错过了什么?

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

2 个答案:

答案 0 :(得分:2)

必须为public注入属性。

public class C1
{
    [Dependency] public Service.IService service { get; set; }
...
}

确实他们需要一个公共制定者。这有效:

public class C1
{
    [Dependency] public Service.IService service { protected get; set; }
...
}

答案 1 :(得分:0)

您应该使用UnityContainer.Resolve而不是直接使用new创建对象来解决依赖关系