DotNet IOC Framework - Microsoft Unity介绍-阿里云开发者社区

开发者社区> master_haku> 正文

DotNet IOC Framework - Microsoft Unity介绍

简介: 一. 新建一个ASP.NET MVC4项目 二. 安装Microsoft Unity   1) 管理Nuget程序包     2)安装Unity3程序包     在你的App_Start文件夹里会多出来两个文件   三.
+关注继续查看

一. 新建一个ASP.NET MVC4项目

二. 安装Microsoft Unity

  1) 管理Nuget程序包

 

  2)安装Unity3程序包

 

  在你的App_Start文件夹里会多出来两个文件

 

三. 一个小例子

1)创建模型类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Data.Entity;
using System.ComponentModel.DataAnnotations;

namespace TestUnity.Models
{
    public class Person
    {
        [ScaffoldColumn(false)]
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        public int Age { get; set; }

        [Display(Name = "Contact Information")]
        public string ContactInfo { get; set; }
    }
}


2) 建立自己的DbContext

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Data.Entity;

namespace TestUnity.Models
{
    public class MyContext : DbContext
    {
        public MyContext()
            : base("DefaultConnection")
        {
        }
        
        public DbSet<Person> Persons { get; set; }
    }
}


 

 

3) 创建Repository模式类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestUnity.Models
{
    public interface IPersonRepository : IDisposable
    {
        IEnumerable<Person> GetAll();
        void InsertorUpdate(Person contact);
        Person Find(int id);
        bool Delete(int id);
        void Save();
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Data;

namespace TestUnity.Models
{
    public class PersonRepository : IPersonRepository
    {
        private MyContext db = new MyContext();

        public IEnumerable<Person> GetAll()
        {
            return db.Persons.ToList();
        }

        public Person Find(int id)
        {
            return db.Persons.Find(id);
        }

        public bool Delete(int id)
        {
            try
            {
                Person person = Find(id);
                db.Persons.Remove(person);
                Save();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public void InsertorUpdate(Person person)
        {
            if (person.Id == default(int))
            {
                // New entity
                db.Persons.Add(person);
            }
            else
            {
                // Existing entity
                db.Entry(person).State = EntityState.Modified;
            }
        }

        public void Save()
        {
            db.SaveChanges();
        }

        public void Dispose()
        {
            db.Dispose();
        }

    }
}

 

 4) 创建控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using TestUnity.Models;

namespace TestUnity.Controllers
{
    public class PersonController : Controller
    {
        private readonly IPersonRepository repository;

        public PersonController(IPersonRepository repository)
        {
            this.repository = repository;
        }

        public ActionResult Index()
        {
            var persons = repository.GetAll();
            return View(persons);
        }

        public ActionResult Details(int id)
        {
            var person = repository.Find(id);
            return View(person);
        }

        public ActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Create(Person person)
        {
            try
            {
                repository.InsertorUpdate(person);
                repository.Save();
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Edit(int id)
        {
            var person = repository.Find(id);
            return View(person);
        }

        [HttpPost]
        public ActionResult Edit(int id, Person model)
        {
            try
            {
                var person = repository.Find(id);
                repository.InsertorUpdate(person);
                repository.Save();
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Delete(int id)
        {
            var person = repository.Find(id);
            return View(person);
        }

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            bool ret = repository.Delete(id);
            if (ret)
                return RedirectToAction("Index");
            return View();
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                repository.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}


5)配置Unity

using System;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;

using TestUnity.Models;

namespace TestUnity.App_Start
{
    /// <summary>
    /// Specifies the Unity configuration for the main container.
    /// </summary>
    public class UnityConfig
    {
        #region Unity Container
        private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() =>
        {
            var container = new UnityContainer();
            RegisterTypes(container);
            return container;
        });

        /// <summary>
        /// Gets the configured Unity container.
        /// </summary>
        public static IUnityContainer GetConfiguredContainer()
        {
            return container.Value;
        }
        #endregion

        /// <summary>Registers the type mappings with the Unity container.</summary>
        /// <param name="container">The unity container to configure.</param>
        /// <remarks>There is no need to register concrete types such as controllers or API controllers (unless you want to 
        /// change the defaults), as Unity allows resolving a concrete type even if it was not previously registered.</remarks>
        public static void RegisterTypes(IUnityContainer container)
        {
            // NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
            // container.LoadConfiguration();

            // TODO: Register your types here
            // container.RegisterType<IProductRepository, ProductRepository>();

            container.RegisterType<IPersonRepository, PersonRepository>();
        }
    }
}


6) 运行结果

 

 

 

 

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Netty 源码阅读入门实战(一)-介绍
1 简介 以 Netty 为底层的框架 Netty 是什么 Netty 技术和方法的特点 设计 针对多种传输类型的统一接口 - 阻塞和非阻塞 简单但更强大的线程模型 真正的无连接的数据报套接字支持 链接逻辑支持复用 易用性 大量的 Javadoc 和 代码实例 除了在 JDK 1.6 + 额外的限制。
1318 0
微服务消息队列(MQTT For IoT)Android Demo使用介绍
目前阿里云官方对于微消息队列 MQTT提供了很多语言的参考示例,但是在实际的使用中发现很多用户在使用Android Sample的时候总是会遇到问题,无法正常调试使用。本文主要介绍Android Sample的使用。
2484 0
Unity 之 贝塞尔曲线介绍和实际使用
Unity 中对贝塞尔曲线的实战应用,制作可视化操作曲线工具,文末附工具源码链接~
28 0
MySQL · RocksDB · TransactionDB 介绍
1. 概述 得益于LSM-Tree结构,RocksDB所有的写入并非是update in-place,所以他支持起来事务的难度也相对较小,主要原理就是利用WriteBatch将事务所有写操作在内存缓存打包,然后在commit时一次性将WriteBatch写入,保证了原子,另外通过Sequence和Key锁来解决冲突实现隔离。
2027 0
Kubernetes监控之Heapster介绍
什么是Heapster? Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS。 Kubernetes有个出名的监控agent---cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime)。
1070 0
DotNet IOC Framework - Microsoft Unity介绍
一. 新建一个ASP.NET MVC4项目 二. 安装Microsoft Unity   1) 管理Nuget程序包     2)安装Unity3程序包     在你的App_Start文件夹里会多出来两个文件   三.
895 0
Docker应用容器引擎介绍与搭建
Docker相信大家都不默认,没有实践过的童鞋也应该听过他的大名,笔者最近挺长一段使用都在使用Docker解决各种问题,而在最近也吧Kubernetes的坑爬完实践了起来,那么从今天开始笔者会带来关于Docker容器化相关的博文,一同探索Docker为什么这么火热,我们怎么去实践使用它.
196 0
介绍2个有趣的IoT的项目
介绍2个有趣的IoT的项目
79 0
带你读《跟老男孩学Linux运维:核心基础篇(上)(第2版)》之二:Linux系统介绍与环境搭建准备
本书是一本以企业Linux运维需要的知识为基础的实战型教学图书,书的内容并非大而全,但处处可以体现实战二字,非常多的内容取自于企业实战案例,并结合老男孩十几年的运维经验和教学经验进行梳理。
1125 0
kubernetes kube-dns service 介绍
kube-dns 是 kubernetes 基于 DNS 的服务发现模块,主要由三个容器组成,分别是 dnsmasq, kube-dns, sidecar,整体的结构如图。 sidecar sidecar 是一个监控健康模块,同时向外暴露metrics 记录,但是为啥叫三蹦子不知道。
1939 0
+关注
master_haku
Master HaKu
502
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载