.net core依赖注入

.net core依赖注入小结

#依赖注入介绍
.net core 中依赖注入是必不可少的一项必学内容,官方介绍为:依赖注入是一种软件设计模式,指一个或多个依赖(或服务)被注入,或通过引用传递,传入一个依赖对象(或客户端)并成为客户状态的一部分。该模式通过自身的行为分离了客户依赖的创建,允许程序设计是松耦合的,同时遵循依赖倒置和单一职责原则。与服务定位器模式直接进行对比,并允许客户了解他们用来查找依赖的机制。
以上是官方的说法,这里补充一下我个人的看法。当然依赖注入的方式有两个,一个是服务注入,另一个是EF注入,目前只了解了服务注入。
##依赖
当一个类需要另一个类协作来完成工作的时候就产生了依赖,使用接口或基类将依赖关系实现抽象化。
将服务注入到使用它的类的构造函数中。 框架负责创建依赖关系的实例,并在不再需要时将其释放。
比如我们在HomeController这个类中需要完成登录的时候,需要我们通过实现另外一个接口ILogin来完成,那这时候HomeC ontroller就可以依赖于ILogin。这里有一个设计原则:依赖于抽象,而不是具体的实现。临时写了一个简易demo,业务不通别见怪。。可能直接上代码好理解一点:

###HomeController

	public class HomeController : Controller
    {
        private readonly ILogin _login;

        //构造函数注入的方式注入
        public HomeController(ILogin login)//依赖于ILogin
        {
            _login= login;
        }
        public string Login()
        {
            return _login.GetLogin("xjm1").UserName;
           
            
        }
    }

###ILogin(登录接口)

	///定义登录接口
 	public interface ILogin 
    {
        User GetLogin(string UserName);
    }

###MockLogin(接口实现类)

    ///ILogin的实现类
 	public class MockLogin: ILogin 
    {
        private List<User> _user;
        //初始化一些基本用户信息
        public MockLogin()
        {
            _user= new List<User>()
            {
                new User(){ UserName = "xjm1",PassWord= "1111",E_mail = "xjm1@126.com"},
                new User(){ UserName = "xjm2",PassWord= "2222",E_mail = "xjm2@126.com"},
                new User(){ UserName = "xjm3",PassWord= "3333",E_mail = "xjm3@126.com"}
            };
        }
        public User GetLogin(string UserName)
        {
            return _user.FirstOrDefault(a => a.UserName == UserName);
        }
    }

###User(用户信息实体类)

	///用户信息实体类
	public class User
    {
        //public int Id { get; set; }
        public string UserName { get; set; }
        public string PassWord{ get; set; }
        public string E_mail { get; set; }
    }

##注册服务
服务容器中注册依赖关系。 ASP.NET Core 提供了一个内置的服务容器 IServiceProvider。 服务通常已在应用的 Startup.ConfigureServices 方法中注册。(绑定业务接口与实现类)

 	  public void ConfigureServices(IServiceCollection services)
      {
            services.AddMvc();
            services.AddSingleton<ILogin ,MockLogin>();
            //services.AddScoped<ServerInterface, ServerTest1>();       //每次请求,都获取一个新的实例,同一个请求获取多次会得到相同的实例。
            //services.AddTransient<ServerInterface, ServerTest1>();    //每次请求,都获取一个新的实例,即使同一个请求获取多次也会是不同的实例
            //services.AddSingleton<ServerInterface, ServerTest1>();    //单例模式,每次都获取同一个实例(和静态类几乎一样)
 	  }

##启动Home

		public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseStaticFiles();
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                        name: "default",
                        template: "{controller=Home}/{action=Login}/{id?}");
            });
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("testdemo!");
            });
        }

其实这些东西很早很早之前就已经接触了,奈何现在重拾,点滴积累,做个笔记,道友共勉~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值