try use PropertiesAutowired in project

尝试使用属性依赖注入,例子参考BlogArticelController
This commit is contained in:
anjoy8 2021-03-29 21:56:14 +08:00
parent 057345b518
commit 74aa72b0a2
6 changed files with 31 additions and 8 deletions

View File

@ -22,9 +22,9 @@ namespace Blog.Core.Controllers
/// </summary>
[Produces("application/json")]
[Route("api/Blog")]
public class BlogController : Controller
public class BlogController : ControllerBase
{
readonly IBlogArticleServices _blogArticleServices;
public IBlogArticleServices _blogArticleServices { get; set; }
private readonly ILogger<BlogController> _logger;
/// <summary>
@ -34,7 +34,6 @@ namespace Blog.Core.Controllers
/// <param name="logger"></param>
public BlogController(IBlogArticleServices blogArticleServices, ILogger<BlogController> logger)
{
_blogArticleServices = blogArticleServices;
_logger = logger;
}
@ -57,6 +56,8 @@ namespace Blog.Core.Controllers
}
Expression<Func<BlogArticle, bool>> whereExpression = a => (a.bcategory == bcategory && a.IsDeleted == false) && ((a.btitle != null && a.btitle.Contains(key)) || (a.bcontent != null && a.bcontent.Contains(key)));
var testId = await _blogArticleServices.GetBlogDetails(1);
var pageModelBlog = await _blogArticleServices.QueryPage(whereExpression, page, intPageSize, " bID desc ");

View File

@ -0,0 +1,17 @@
using Autofac;
using Microsoft.AspNetCore.Mvc;
namespace Blog.Core.Extensions
{
public class AutofacPropertityModuleReg : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
var controllerBaseType = typeof(ControllerBase);
builder.RegisterAssemblyTypes(typeof(Program).Assembly)
.Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
.PropertiesAutowired();
}
}
}

View File

@ -11,9 +11,11 @@ using Blog.Core.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
@ -116,6 +118,8 @@ namespace Blog.Core
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
});
services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
_services = services;
//支持编码大全 例如:支持 System.Text.Encoding.GetEncoding("GB2312") System.Text.Encoding.GetEncoding("GB18030")
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
@ -125,6 +129,7 @@ namespace Blog.Core
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterModule(new AutofacModuleRegister());
builder.RegisterModule<AutofacPropertityModuleReg>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

View File

@ -66,6 +66,7 @@ namespace Blog.Core.Extensions
builder.RegisterAssemblyTypes(assemblysServices)
.AsImplementedInterfaces()
.InstancePerDependency()
.PropertiesAutowired()
.EnableInterfaceInterceptors()//引用Autofac.Extras.DynamicProxy;
.InterceptedBy(cacheType.ToArray());//允许将拦截器服务的列表分配给注册。
@ -73,6 +74,7 @@ namespace Blog.Core.Extensions
var assemblysRepository = Assembly.LoadFrom(repositoryDllFile);
builder.RegisterAssemblyTypes(assemblysRepository)
.AsImplementedInterfaces()
.PropertiesAutowired()
.InstancePerDependency();
#endregion

View File

@ -13,7 +13,7 @@ namespace Blog.Core.Services.BASE
public class BaseServices<TEntity> : IBaseServices<TEntity> where TEntity : class, new()
{
//public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();
public IBaseRepository<TEntity> BaseDal;//通过在子类的构造函数中注入,这里是基类,不用构造函数
public IBaseRepository<TEntity> BaseDal { get; set; }//通过在子类的构造函数中注入,这里是基类,不用构造函数
public async Task<TEntity> QueryById(object objId)
{

View File

@ -13,12 +13,10 @@ namespace Blog.Core.Services
{
public class BlogArticleServices : BaseServices<BlogArticle>, IBlogArticleServices
{
IBaseRepository<BlogArticle> _dal;
public IBaseRepository<BlogArticle> _dal { get; set; }
IMapper _mapper;
public BlogArticleServices(IBaseRepository<BlogArticle> dal, IMapper mapper)
public BlogArticleServices(IMapper mapper)
{
this._dal = dal;
base.BaseDal = dal;
this._mapper = mapper;
}
/// <summary>