Abp 依赖注入
官方文档
https://docs.abp.io/zh-Hans/abp/latest/Dependency-Injection
基本使用
直接注册
context.Services.AddTransient<IGreetService, GreetService>();
实现接口(就是一个标记)
ITransientDependency
打Dependency特性
[Dependency(ServiceLifetime.Transient)]
// 如果已经有注册过,可以改ReplaceServices为true,从而替换掉原有的
[Dependency(ServiceLifetime.Transient, ReplaceServices = true)]
当实现的接口特别多,程序报错了,可能会用到
[ExposeService(typeof(接口))]
控制台使用Autofac属性注入
- 在使用工厂创建AbpApplication的时候,调用options的UseAutofac方法
这里是一个winform项目的示例
public static class Program
{
[STAThread]
static void Main()
{
var app = AbpApplicationFactory.Create<MyModule>(options =>
{
options.UseAutofac();
});
app.Initialize();
ApplicationConfiguration.Initialize();
// 获取Form类型实例必须在 Winform的ApplicationConfiguration.Initialize();方法之后,不然会报错。
// 哪怕是通过new创建一个Form对象,也要放到其后面
var form = app.ServiceProvider.GetService<Form1>();
Application.Run(form);
}
}
接口和实现,并打上自动注册的标识
public interface IGreetService
{
string Hello(string name);
}
public class GreetService : IGreetService,ITransientDependency
{
public string Hello(string name)
{
return $"你好,{name}";
}
}
添加了这个之后,就可以在任何通过ServiceProder构造出来的对象内,添加属性的方式注入自己需要的服务,比如
public partial class Form1 : Form
{
// 直接加个属性,就可以了。
public IGreetService GreetService { get; set; }
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var str = GreetService.Hello(txtName.Text);
MessageBox.Show(str);
}
} public partial class Form1 : Form
{
public IGreetService GreetService { get; set; }
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var str = GreetService.Hello(txtName.Text);
MessageBox.Show(str);
}
}
标签:依赖,string,Form,笔记,Abp,Form1,IGreetService,GreetService,public
From: https://www.cnblogs.com/wosperry/p/16920565.html