AutoFac在WinForm中的使用

新建winform项目,命名为WfaAutoFacDemo,使用nuget添加autofac的引用,最新版为4.8.1,直接安装即可

 添加一个服务接口:IService和ISecondService,定义如下:

namespace WfaAutoFacDemo.Interface
{
    public interface IService
    {
        string Do();
    }

    public interface ISecondService : IService
    {
        string SecondDo();
    }

}

添加三个实体类,定义如下,第一个继承接口IService,第二个继承ISecondService,第三个没有继承接口:

namespace WfaAutoFacDemo.Model
{
    public class FirstModel : IService
    {
        private string first = "first";
        public string Do()
        {
            return first;
        }
    }

    public class SecondModel : ISecondService
    {
        private string second = "second";
        public string Do()
        {
            return second;
        }

        public string SecondDo()
        {
            return $"{second}-{second}";
        }
    }
    public class ThirdModel
    {
        private string third = "third";
        public string Do()
        {
            return third;
        }
    }
}

在form1中添加注册类型如下:

//在类中定义变量
private IContainer container;

//构造函数中添加如下代码
var builder = new ContainerBuilder();
            
builder.RegisterType<FirstModel>().Named<IService>("First");
builder.RegisterType<SecondModel>().Named<IService>("Second");
builder.RegisterType<SecondModel>().Named<ISecondService>("Second");
builder.RegisterType<ThirdModel>();
builder.RegisterInstance(this).As<Form>();
container = builder.Build();

form1中添加四个按钮,四个Label,

四个按钮的点击功能如下:

private void BtnFirstModel_Click(object sender, EventArgs e)
{
     var first =container.ResolveOptionalNamed<IService>("First");
     lblFirstModel.Text = first.Do();
}

private void BtnSecondModel_Click(object sender, EventArgs e)
{
     var second = container.ResolveOptionalNamed<IService>("Second");
     lblSecondModel.Text = second.Do();
}
private void BtnSecondModel2_Click(object sender, EventArgs e)
{
     var second = container.ResolveOptionalNamed<ISecondService>("Second");
     lblSecondModel2.Text = second.SecondDo();
}

private void BtnThirdModel_Click(object sender, EventArgs e)
{
     var third = container.Resolve<ThirdModel>();
     lblThirdModel.Text = third.Do();
}

 点击CTRL+F5,分别点击四个按钮,运行界面如下

 

注意:

1、对于不使用接口的类可以直接使用RegisterType

2、对于多个继承接口的,不能直接使用RegisterType,要RegisterType方法后再添加Named方法,并指定一个字符串

3、对于一个实体类继承接口,并且继承的接口又有父接口的,可以指定不同的接口类型,使用时可以根据需求选择不同的接口,如按钮SecondModel和SecondModel2选择了不同的接口进行了使用


  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 MVC5 使用 Autofac 进行配置文件注入,需要按照以下步骤进行操作: 1. 安装 AutofacAutofac.Mvc5 NuGet 包。 2. 创建一个类来注册依赖项。例如,可以创建一个名为 AutofacConfig 的类。 3. 在 AutofacConfig 类创建一个静态方法来注册依赖项。该方法应该接受一个 IContainerBuilder 对象作为参数。 4. 在 Register 方法使用 RegisterControllers 方法注册控制器。 5. 使用 RegisterAssemblyModules 方法注册程序集的所有模块。 6. 使用 RegisterModelBinders 方法注册模型绑定器。 7. 使用 RegisterFilterProvider 方法注册筛选器提供程序。 8. 在 Global.asax.cs 文件的 Application_Start 方法,调用 AutofacConfig 类的 Register 方法,并将其传递给一个新的 ContainerBuilder 对象。 9. 在 Global.asax.cs 文件的 Application_EndRequest 方法,调用 AutofacDependencyResolver 类的 Dispose 方法以清理依赖项。 下面是一个示例 AutofacConfig 类,用于在 MVC5 实现配置文件注入: ```csharp using Autofac; using Autofac.Integration.Mvc; using System.Web.Mvc; public class AutofacConfig { public static void Register(ContainerBuilder builder) { builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.RegisterAssemblyModules(typeof(MvcApplication).Assembly); builder.RegisterModelBinders(typeof(MvcApplication).Assembly); builder.RegisterFilterProvider(); // 注册依赖项 builder.Register(c => new MyService(c.Resolve<MyDependency>())).As<IMyService>().InstancePerRequest(); builder.RegisterType<MyDependency>().As<IMyDependency>().SingleInstance(); } } ``` 在 Global.asax.cs 文件,可以像这样调用 AutofacConfig 类的 Register 方法: ```csharp protected void Application_Start() { var builder = new ContainerBuilder(); AutofacConfig.Register(builder); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); // ... } ``` 然后,在 Global.asax.cs 文件的 Application_EndRequest 方法,可以像这样调用 AutofacDependencyResolver 类的 Dispose 方法: ```csharp protected void Application_EndRequest() { var resolver = DependencyResolver.Current as AutofacDependencyResolver; if (resolver != null) { resolver.Dispose(); } } ``` 以上就是在 MVC5 使用 Autofac 进行配置文件注入的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值