具体实现
[Intercept(typeof(CustomAutofacAop))]
public class TestServiceA : ITestServiceA
{
public TestServiceA()
{
Console.WriteLine($"{this.GetType().Name}被构造。。。");
}
public virtual void Show()
{
Console.WriteLine("A123456");
}
}
public class TestServiceB : ITestServiceB
{
public ITestServiceA _iTestServiceA = null;
public void SetService(ITestServiceA iTestServiceA)
{
_iTestServiceA = iTestServiceA;
}
public TestServiceB(ITestServiceA iTestServiceA)
{
Console.WriteLine($"{this.GetType().Name}被构造。。。");
}
public void Show()
{
//_iTestServiceA.Show();
Console.WriteLine($"This is TestServiceB B123456");
}
}
public class TestServiceC : ITestServiceC
{
public TestServiceC(ITestServiceB iTestServiceB)
{
Console.WriteLine($"{this.GetType().Name}被构造。。。");
}
public void Show()
{
Console.WriteLine("C123456");
}
}
{
public class TestServiceD : ITestServiceD
{
public string strin { get; set; }
public ITestServiceA _iTestServiceA { get; set; }
public ITestServiceB _iTestServiceB { get; set; }
public ITestServiceC _iTestServiceC { get; set; }
public TestServiceD()
{
Console.WriteLine($"{this.GetType().Name}被构造。。。");
}
public void Show()
{
_iTestServiceA.Show();
Console.WriteLine("D123456");
}
}
1.构造函数注入
ContainerBuilder containerBuilder = new ContainerBuilder(); //创建容器
containerBuilder.RegisterType().As();
containerBuilder.RegisterType().As();
containerBuilder.RegisterType().As();
IContainer container = containerBuilder.Build(); //得到容器
ITestServiceB testServiceB = container.Resolve(); //获取服务
testServiceB.Show();
2.属性注入
ContainerBuilder containerBuilder = new ContainerBuilder(); //创建容器
containerBuilder.RegisterType().As();
containerBuilder.RegisterType().As();
containerBuilder.RegisterType().As();
containerBuilder.RegisterType().As().PropertiesAutowired();
IContainer container = containerBuilder.Build(); //得到容器
ITestServiceD testServiceD = container.Resolve(); //获取服务
testServiceD.Show();
3.方法注入
ContainerBuilder containerBuilder = new ContainerBuilder(); //创建容器
containerBuilder.RegisterType().As();
containerBuilder.RegisterType().OnActivated(e =>
e.Instance.SetService(e.Context.Resolve())).As();
containerBuilder.RegisterType().As();
containerBuilder.RegisterType().As().PropertiesAutowired();
IContainer container = containerBuilder.Build(); //得到容器
ITestServiceB testServiceB = container.Resolve(); //获取服务
testServiceB.Show();