使用autofac 3.1.1进行属性注入



我试图通过以下服务中的属性注入,如果我尝试构造函数注入,它可以工作,但我想进行属性注入,我缺少什么?

public class SodaService  
{  
    public ISoda _s;
    //public SodaService(ISoda s)  
    //{  
    //    _s = s;  
    //}  
    public string GetSoda()
    {
        return _s.SodaName;
    }
}
//Soda Class implementing ISoda  
public class Soda : ISoda  
{  
    public string SodaName
    {
        get { return "Default Soda"; }
    }
}
public interface ISoda  
{  
    string SodaName { get; }
}
//Main calling program
class Program  
{  
    static void Main(string[] args)  
    {  
        var container = GetContainer();   
        SodaService s=container.Resolve<SodaService>();    
        Console.Write(s.GetSoda());  
        Console.Read();  
    }  
    private static IContainer GetContainer()
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<Soda>().As<ISoda>();
        builder.RegisterType<SodaService>()
            .PropertiesAutowired();
        var container = builder.Build();
        return container;
    }
}

编辑:以上问题都解决了,我还有一个问题。。。。

我怎么能做这样的作品,我不想用s=容器。解决<ISodaService>();相反,当我运行程序时,依赖关系应该自动注入

class Program
    { 
        public static ISodaService s { get; set; }
        static void Main(string[] args)
        {
            SetUpContainer();
            //s = container.Resolve<ISodaService>();
            Console.Write(s.GetSoda());
            Console.Read();
        }
        private static void SetUpContainer()
        {
            var builder = new ContainerBuilder();
             builder.RegisterType<Soda>().As<ISoda>();
          builder.RegisterType<SodaService>().As<ISodaService>().PropertiesAutowired();
           builder.Build();
        }
    }

问题是Main方法是静态的。指定一类程序并用作非静态类

class Program
    { 
        public ISodaService s { get; set; }
        static void Main(string[] args)
        {
            var resolver=SetUpContainer();
            var instance=resolver.Resolve<Program>();
            instance.Execute(args);
        }
        public void Execute(string[] args)
        {
            Console.Write(s.GetSoda());
            Console.Read();
        }
        private Autofac.IContainer void SetUpContainer()
        {
          var builder = new ContainerBuilder();
          builder.RegisterType<Soda>().As<ISoda>();
          builder.RegisterType<SodaService>().As<ISodaService>().PropertiesAutowired();
          builder.RegisterType<Program>().PropertiesAutowired();
          return builder.Build();
        }
    }

最新更新