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也删除了他的内容