Asp.NetCore AutoFacプログラムセットによる依存注入
一、注入に依存するための専用インタフェース(IAutoInject)を作成し、すべてのサービスインタフェースがこのインタフェースに継承される
namespace DDD.Domain
{
public interface IAutoInject
{
}
}
二、サービスインタフェースを追加し、IAutoInjectを継承する必要がある
namespace DDD.Domain.Product.Inter
{
public interface IProductTypeService : IAutoInject
{
int Add(ProductType entity);
}
}
三、サービス実装クラスを追加し、サービスインタフェースIProductTypeサービスを継承する
namespace DDD.Domain.Product.Impl
{
public class ProductTypeService: DBBase , IProductTypeService
{
public int Add(ProductType entity)
{
return db.Insertable(entity).ExecuteCommand();
}
}
}
四、依存注入クラスの追加
namespace CoreTest
{
public class AutoFacIoc
{
public static IContainer Injection(IServiceCollection services)
{
var builder = new ContainerBuilder();
//InstancePerLifetimeScope: Lifetime
//SingleInstance: , , ; ;
//InstancePerDependency: , , ; ;
// IAutoInject
var baseTypeDomain = typeof(DDD.Domain.IAutoInject);
//
//DDD.Domain
Assembly assembliesDomain = Assembly.Load("DDD.Domain");
//
builder.RegisterAssemblyTypes(assembliesDomain)
.Where(b => b.GetInterfaces().Any(c => c == baseTypeDomain && b != baseTypeDomain))
.AsImplementedInterfaces()
.SingleInstance(); //
builder.Populate(services);
return builder.Build();
}
}
}
五、またスタートします。csで呼び出す
説明:ConfigureServicesメソッドの戻り値をIServiceProviderに変更する必要があります.ApplicationContainerプロパティの追加
public IContainer ApplicationContainer { get; private set; }
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
this.ApplicationContainer = AutoFacIoc.Injection(services);
return new AutofacServiceProvider(this.ApplicationContainer);
}
六、構造関数による注入
namespace CoreTest.Controllers
{
public class ProductTypeController : Controller
{
IProductTypeService productTypeService;
public ProductTypeController(IProductTypeService _productTypeService)
{
this.productTypeService = _productTypeService;
}
public IActionResult Add()
{
ProductType entity = new ProductType()
{
CreateBy = "",
CreateTime = DateTime.Now
};
int re = productTypeService.Add(entity);
re += productApp.AddProductType(entity);
return Json(re);
}
}
}
最後に、依存注入構造は、依存注入インタフェースIAutoInject="サービスインタフェースIProductType-Service="サービス実装クラスProductType-Service