• mvc5整合Autofac


    本文中将使用 mvc5与webapi2进行对Autofac整合

    准备工作:

      1、vs2013 or vs2013+

      2、网络良好,nuget正常访问

    好了需要的准备工作就这么多。

    -----------------------------分割线---------------------------------------

    1、首先新建一个mvc5 与 webapi2 的项目如下图

    2、安装相应的插件:

    1   <package id="Autofac" version="3.5.0" targetFramework="net46" />
    2   <package id="Autofac.Configuration" version="3.3.0" targetFramework="net46" />
    3   <package id="Autofac.Mvc5" version="3.3.4" targetFramework="net46" />
    4   <package id="Autofac.Mvc5.Owin" version="3.1.0" targetFramework="net46" />
    5   <package id="Autofac.Owin" version="3.1.0" targetFramework="net46" />
    6   <package id="Autofac.WebApi2" version="3.4.0" targetFramework="net46" />
    7   <package id="Autofac.WebApi2.Owin" version="3.3.0" targetFramework="net46" />

     ps:请参考id进行进行安装

    3、在Startup文件中配置 Autofac(ps:看下面代码 有很多可选配置 应为我没有用到就注释了。例如builder.RegisterModelBinders(Assembly.GetExecutingAssembly())  因为我没有自定义ModelBinders 就启用)

     1 public partial class Startup
     2     {
     3         public void Configuration(IAppBuilder app)
     4         {
     5             //ConfigureAuth(app);
     6             var builder = new ContainerBuilder();
     7             // Register dependencies, then...
     8             IOCRegister.Init(builder);
     9 
    10             // Register your MVC controllers.
    11             builder.RegisterControllers(typeof(MvcApplication).Assembly);
    12             // OPTIONAL: Register model binders that require DI.
    13             //builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
    14             //builder.RegisterModelBinderProvider();
    15 
    16             // OPTIONAL: Register web abstractions like HttpContextBase.
    17             //builder.RegisterModule<AutofacWebTypesModule>();
    18 
    19             // OPTIONAL: Enable property injection in view pages.
    20             //builder.RegisterSource(new ViewRegistrationSource());
    21 
    22             // OPTIONAL: Enable property injection into action filters.
    23             builder.RegisterFilterProvider();
    24             builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
    25             var config = GlobalConfiguration.Configuration;
    26             // Set the dependency resolver to be Autofac.
    27             var container = builder.Build();
    28             DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    29             config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
    30             app.UseAutofacMiddleware(container);
    31             app.UseAutofacMvc();
    32             app.UseAutofacWebApi(config);
    33         }
    34     }

    1
    public class IOCRegister 2 { 3 public static void Init(ContainerBuilder builder) 4 { 5 XmlConfigurator.Configure(new FileInfo(Path.Combine(HttpContext.Current.Server.MapPath("/"), "log4net.config"))); 6 var logger = LogManager.GetLogger(""); 7 builder.RegisterInstance(logger).As<ILog>().SingleInstance(); 8 9 10 var configPath = Path.Combine(HttpContext.Current.Server.MapPath("/"), @"App_Data/Config"); 11 12 builder.RegisterModule(new ConfigurationSettingsReader("components", Path.Combine(configPath, "components.xml"))); 13 //更多配置文件..... 14 15 } 16 }

    ps:以上代码使用配置文件的方法配置 注入实例

    4、配置文件components.xml

    1 <?xml version="1.0" encoding="utf-8" ?>
    2 <components defaultAssembly="BA.Framework.Util">
    3   <files>
    4     <file name="App_Data/Config/services.xml" section="services" />
    5   </files>
    6 </components>

    5、配置文件 services.xml

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <service defaultAssembly="WebApplication1Service">
     3   <components>
     4     <component
     5            type="WebApplication1Service.TestService"
     6            service="WebApplication1Service.ITestService"
     7            instance-scope="per-lifetime-scope">
     8       <parameters>
     9         <parameter name="name" value="adfasdfasdfasdfasdf" />
    10         <parameter name="age" value="121"/>
    11       </parameters>
    12     </component>
    13  
    14   </components>
    15 </service>

    ps: 注意 defaultAssembly 需要配置注入类的命名空间

    最后:关于TestService.cs

     1  public interface ITestService
     2     {
     3         string Test();
     4 
     5         TestModel GetInfo();
     6 
     7     }
     8 
     9     public class TestService : ITestService
    10     {
    11 
    12         private readonly string name;
    13         private readonly int age;
    14 
    15         public TestService(string name, int age)
    16         {
    17             this.name = name;
    18             this.age = age;
    19         }
    20         public int Count { set; get; }
    21 
    22         public string Test()
    23         {
    24             return "afdafdasdf";
    25         }
    26 
    27         public TestModel GetInfo()
    28         {
    29             return new TestModel()
    30             {
    31                 Age = age,
    32                 Name = name
    33             };
    34         }
    35     }
    36 
    37     public class TestModel
    38     {
    39         public string Name { get; set; }
    40         public int Age { set; get; }
    41     }

    Controller里使用Service:

     public class Home2Controller : ApiController
        {
            private readonly ITestService _testService;
            public Home2Controller(ITestService testService)
            {
                _testService = testService;
            }
            public TestModel Get()
            {
                return _testService.GetInfo();
            }
        }
  • 相关阅读:
    事件处理之跨浏览器
    IE事件处理
    DOM0级事件处理、DOM2级事件处理
    JS内置对象学习总结
    JS事件响应的学习总结
    vuex的学习例子
    npm run build 打包后,如何运行在本地查看效果(Apache服务)
    Vue.js 引入外部js方法
    Table展开行
    正则表达式test()和exec()、 search() 和 replace()用法实例
  • 原文地址:https://www.cnblogs.com/rufus-hua/p/5168346.html
Copyright © 2020-2023  润新知