Autofac是一个用于依赖注入的开源框架,可以帮助我们管理对象的生命周期和解决对象之间的依赖关系。在Autofac中,我们可以使用Lambda表达式来指定服务的实现方式。
下面是一个使用Autofac实现根据可构建内容选择服务的示例代码:
首先,我们需要安装Autofac NuGet包。可以在Visual Studio的NuGet包管理器中搜索并安装Autofac。
创建一个接口IShape,定义一个方法CalculateArea():
public interface IShape
{
double CalculateArea();
}
创建两个实现该接口的类,一个是Circle,一个是Rectangle:
public class Circle : IShape
{
private readonly double _radius;
public Circle(double radius)
{
_radius = radius;
}
public double CalculateArea()
{
return Math.PI * _radius * _radius;
}
}
public class Rectangle : IShape
{
private readonly double _length;
private readonly double _width;
public Rectangle(double length, double width)
{
_length = length;
_width = width;
}
public double CalculateArea()
{
return _length * _width;
}
}
在Main方法中,我们可以使用Autofac来根据可构建的内容选择服务的实现:
using Autofac;
using System;
class Program
{
static void Main(string[] args)
{
var builder = new ContainerBuilder();
// 注册服务
builder.RegisterType().Named("Circle");
builder.RegisterType().Named("Rectangle");
// 创建容器
var container = builder.Build();
// 根据可构建的内容选择服务的实现
IShape shape = null;
string shapeType = Console.ReadLine();
if (shapeType == "Circle")
{
shape = container.ResolveNamed("Circle");
}
else if (shapeType == "Rectangle")
{
shape = container.ResolveNamed("Rectangle");
}
// 调用服务的方法
if (shape != null)
{
double area = shape.CalculateArea();
Console.WriteLine($"Area: {area}");
}
else
{
Console.WriteLine("Invalid shape type");
}
Console.ReadLine();
}
}
在上面的示例代码中,我们使用Autofac的ContainerBuilder来注册服务,然后根据用户输入的shapeType来选择具体的服务实现。最后,我们调用所选服务的CalculateArea()方法来计算面积。
运行示例代码,当输入"Circle"时,将会创建一个Circle对象并计算其面积;当输入"Rectangle"时,将会创建一个Rectangle对象并计算其面积。