1. 首页>
  2. 技术文章>
  3. .net core使用autofac注入最佳实践

.net core使用autofac注入最佳实践

8/4/18 11:00:55 AM 浏览 1782 评论 0

.net core autofac

在之前的多篇文章中,.net core我们都是使用默认的DI,但是在实际使用中,对于复杂的情况,我们还是得用回Autofac比如通过配置文件注入,现在.net core默认提供的DI自己需要写些代码去支持,另外对于自动注入也需要额外代码支持,使用Autofac则方便很多。使用Autofac,我们的仓储和服务使用自动注入,并检索继承了IDependency接口的,那么代码简单如下:

var builder = new ContainerBuilder();
builder.Populate(services);
var baseType = typeof(IDependency);
//服务
var assemblyService = Assembly.Load("MyCore.Services");
//仓储
var assemblyRepository = Assembly.Load("MyCore.Repositories");
builder.RegisterAssemblyTypes(assemblyService, assemblyRepository).Where(m => baseType.IsAssignableFrom(m) && m != baseType) .AsImplementedInterfaces().InstancePerLifetimeScope();

另外有一部分我们放到autofac.json中去,比如一些数据库连接字符串,Reids配置,缓存选择,日志选择等,那么autofac.json代码如下:

{
  "components": [
    {
      "type": "MyCore.Infrastructure.Cache.DefaultRedisCache,MyCore.Infrastructure",
      "services": [
        {
          "type": "MyCore.Infrastructure.Cache.ICacheService,MyCore.Infrastructure"
        }
      ],
      "instanceScope": "single-instance"
    },
    {
      "type": "MyCore.Infrastructure.Logger.NLogger,MyCore.Infrastructure",
      "services": [
        {
          "type": "MyCore.Infrastructure.Logger.ILogger,MyCore.Infrastructure"
        }
      ],
      "instanceScope": "single-instance"
    },
    {
      "type": "MyCore.Repositories.Common.MySqlSugarClient,MyCore.Repositories",
      "instanceScope": "per-lifetime-scope"
    },
    {
      "type": "MyCore.Domain.Response.Common.SystemConfig,MyCore.Domain",
      "autoActivate": true,
      "instanceScope": "single-instance",
      "properties": {
        "RedisConnection": "",
        "RedisInstanceName": "52jiagou:dev:",
        "ConnectionString": ""
      }
    }
  ]
}

注入代码:

IConfigurationBuilder config = new ConfigurationBuilder();
config.AddJsonFile("config/autofac.json");
var module = new ConfigurationModule(config.Build());
builder.RegisterModule(module);

这里取得一些系统配置信息SystemConfig使用单例。缓存的具体实现使用内存还是redis还是其它,使用配置文件配置是最佳实践。

网友讨论