C# 使用autofac 3.1.1进行属性注入

C# 使用autofac 3.1.1进行属性注入,c#,properties,dependency-injection,autofac,code-injection,C#,Properties,Dependency Injection,Autofac,Code Injection,我正在尝试通过以下服务中的属性进行注入,如果我尝试构造函数注入,它可以工作,但我想进行属性注入,我缺少什么 public class SodaService { public ISoda _s; //public SodaService(ISoda s) //{ // _s = s; //} public string GetSoda() { return _s.SodaName;

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

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;
    }
}
公共级索达服务
{  
公共ISoda;
//公共苏打水服务(ISoda s)
//{  
//_s=s;
//}  
公共字符串GetSoda()
{
返回(美国索达纳姆);;
}
}
//Soda类实现ISoda
公共级苏打水:ISoda
{  
公共字符串索达南
{
获取{return“Default Soda”;}
}
}
公共接口ISoda
{  
字符串SodaName{get;}
}
//主调用程序
班级计划
{  
静态void Main(字符串[]参数)
{  
var container=GetContainer();
SodaService s=container.Resolve();
Console.Write(s.GetSoda());
Console.Read();
}  
私有静态IContainer GetContainer()
{
var builder=new ContainerBuilder();
builder.RegisterType().As();
builder.RegisterType()
.属性自动连线();
var container=builder.Build();
返回容器;
}
}
编辑: 以上问题已经解决,我还有一个问题

我怎么能让这样的东西工作,我不想用 s=容器。解析(); 相反,当我运行程序时,依赖项应该自动注入

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();

        }
    }
类程序
{ 
公共静态ISodaService s{get;set;}
静态void Main(字符串[]参数)
{
SetUpContainer();
//s=container.Resolve();
Console.Write(s.GetSoda());
Console.Read();
}
私有静态void SetUpContainer()
{
var builder=new ContainerBuilder();
builder.RegisterType().As();
builder.RegisterType().As().PropertiesAutowired();
builder.Build();
}
}

您遇到的问题是主方法是静态的。实例化一个程序类,并将其作为非静态类使用

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();

        }
    }
类程序
{ 
公共ISodaService s{get;set;}
静态void Main(字符串[]参数)
{
var解析器=SetUpContainer();
var instance=resolver.Resolve();
Execute(args);
}
public void Execute(字符串[]args)
{
Console.Write(s.GetSoda());
Console.Read();
}
专用Autofac.IContainer void SetUpContainer()
{
var builder=new ContainerBuilder();
builder.RegisterType().As();
builder.RegisterType().As().PropertiesAutowired();
builder.RegisterType().PropertiesAutowired();
返回builder.Build();
}
}

我遗漏了什么吗?酒店在哪里?请注意,
\u s
不是一个属性,而是一个公共字段。很抱歉,您的回答完全正确,它现在可以工作了。我将它更改为属性。@Steven回答我不确定@oakio删除他的内容的原因。我如何让Steven评论,因为@oakio也删除了他的内容