您的位置:首页 > 编程语言 > ASP

Asp.Net WebApi2中实现Autofac的注入

2017-12-27 00:00 197 查看
阅读此文前请先掌握小白快速入手Asp.Net WebApi2

1、使用NuGet添加Autofac、Autofac ASP.NET MVC5 Integration和Autofac ASP.NET Web API2.2 Integration

如下图:



2、创建类库

1)在解决方案中创建IocProject.Model(实体模型层)、IocProject.Dao(数据访问层)、IocProject.Service(逻辑业务层)类库,如下图:



3、创建接口和实现

1)在IocProject.Model(实体模型层)创建实体类Product,代码如下:

public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}

2)在IocProject.Dao(数据访问层)中添加IocProject.Model层的引用,并创建ProductDao类和IProuctDao接口,代码如下:

public class ProductDao:IProductDao
{
public Product[] Products;
public ProductDao()
{
Products = new Product[]
{
new Product(){ Id = 1, Name = "一箱橙子", Price = 58 },
new Product(){ Id = 2, Name = "三包薯片", Price = 18 },
new Product(){ Id = 3, Name = "五瓶可乐", Price = 15 }
};
}

/// <summary>
/// 查询所有商品
/// </summary>
/// <returns></returns>
public IEnumerable<Product> GetProductList()
{
return Products;
}

/// <summary>
/// 根据id查询商品
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public Product GetProductById(int id)
{
return Products.FirstOrDefault(p => p.Id == id);
}
}

public interface IProductDao
{
/// <summary>
/// 查询所有商品
/// </summary>
/// <returns></returns>
IEnumerable<Product> GetProductList();

/// <summary>
/// 根据id查询商品
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Product GetProductById(int id);
}

3)在IocProject.Service(逻辑业务层)中添加IocProject.Model层和IocProject.Dao层的引用,并创建ProductService类和IProductService接口,代码如下:

public class ProductService:IProductService
{
public IProductDao _productDao;

/// <summary>
/// 构造器注入
/// </summary>
/// <param name="productDao"></param>
public ProductService(IProductDao productDao)
{
_productDao = productDao;
}

/// <summary>
/// 查询所有商品
/// </summary>
/// <returns></returns>
public IEnumerable<Product> GetProductList()
{
return _productDao.GetProductList();
}

/// <summary>
/// 根据id查询商品
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public Product GetProductById(int id)
{
return _productDao.GetProductById(id);
}
}

public interface IProductService
{
/// <summary>
/// 查询所有商品
/// </summary>
/// <returns></returns>
IEnumerable<Product> GetProductList();

/// <summary>
/// 根据id查询商品
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Product GetProductById(int id);
}

4、修改控制器

在IocProject.WebApi中添加IocProject.Model层、IocProject.Dao层和IocProject.Service层的引用,修改控制器ProductController中的方法,代码如下:

public class ProductController : ApiController
{
public IProductService _productService;

/// <summary>
/// 构造器注入
/// </summary>
/// <param name="productService"></param>
public ProductController(IProductService productService)
{
_productService = productService;
}

/// <summary>
/// 查询所有商品
/// </summary>
/// <returns></returns>
public IEnumerable<Product> GetProductList()
{
return _productService.GetProductList();
}

/// <summary>
/// 根据id查询商品
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public Product GetProductById(int id)
{
return _productService.GetProductById(id);
}
}

5、使用Autofac注入

在App_Start文件夹下新建AutofacConfig类

public class AutofacConfig
{
public static void Run()
{
SetAutofacWebApi();
}

/// <summary>
/// 注册接口和实现
/// </summary>
private static void SetAutofacWebApi()
{
ContainerBuilder builder = new ContainerBuilder();
HttpConfiguration config = GlobalConfiguration.Configuration;

// Register API controllers using assembly scanning.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<ProductDao>().As<IProductDao>()
.InstancePerApiRequest();
builder.RegisterType<ProductService>().As<IProductService>()
.InstancePerApiRequest();

var container = builder.Build();
// Set the WebApi dependency resolver.
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
}

在Global中添加以下代码

protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(WebApiConfig.Register);

//Call Autofac DI configurations
AutofacConfig.Run();
}

以上就是在WebApi2中实现了Autofac的注入

6、运行项目

在浏览器Url后面加上“/api/product”查询所有的商品,加上“/api/product/2”查询单个商品,如下图:





使用Postman





7、总结
Autofac确实用起来很方便,上面只是简单的实现,如果想深入学习可以到Autofac官网去了解下。
最近在看相关文章,很多都太专业化了没怎么看懂,这是自己现在对IoC的一些理解,记录下来,要不然时间一久,也就忘了。
自己对IoC模式理解还很浅,希望得到各位的指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ASP.NET Web API Autofac