系列目錄
很多人問我如何用配置文件來配置注入,本節演示如何利用配置文件來注入,道理是一樣的,跳轉到上一節下載源碼一起來動手!
1.打開源碼定位到文件DependencyRegisterType.cs
紅框部分是必須的,接口和實現的命名空間,程序集,類,所以我們的配置文件也需要擁有以上屬性
2.在Apps.Web新建一個XML文件
並添加以下代碼:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> </configSections> <unity> <alias alias="" type="" /> <namespace name="Apps.IBLL" /> <namespace name="Apps.BLL" /> <namespace name="Apps.IDAL" /> <namespace name="Apps.DAL" /> <assembly name="Apps.IBLL" /> <assembly name="Apps.BLL" /> <assembly name="Apps.IDAL" /> <assembly name="Apps.DAL" /> <container> <register type="ISysPersonBLL" mapTo="SysPersonBLL" /> <register type="ISysPersonRepository" mapTo="SysPersonRepository" /> </container> </unity> </configuration>
其實alias節點啥都不寫也是沒有關系的,只是作為一個別名使用,我們下面全是使用真實名稱
好了,准備調用!
3.修改原來Apps.Core下的UnityConfig.cs為
using Microsoft.Practices.Unity; using Microsoft.Practices.Unity.Configuration; using System.Configuration; using System.Web; using System.Web.Http; using System.Web.Mvc; using Unity.WebApi; namespace Apps.Core { public static class UnityConfig { public static void RegisterComponents() { var container = BuildUnityContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container); } /// <summary> /// Builds the unity container. /// </summary> /// <returns></returns> private static IUnityContainer BuildUnityContainer() { var container = new UnityContainer(); var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = HttpContext.Current.Server.MapPath("~/Unity.Config") }; Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); var unitySection = (UnityConfigurationSection)configuration.GetSection("unity"); container.LoadConfiguration(unitySection); return container; } } }
4.最后在Web網站Apps.Web的Global添加調用代碼
UnityConfig.RegisterComponents();
5.運行代碼
控制器代碼:
public class Default1Controller : BaseController { [Dependency] public ISysPersonBLL m_BLL { get; set; } public ActionResult Index() { ViewBag.Value = m_BLL.GetValue(); return View(); } }
業務層代碼:
public class SysPersonBLL:ISysPersonBLL { [Dependency] public ISysPersonRepository m_Rep { get; set; } public string GetValue() { return m_Rep.GetValue(); } }
數據訪問層代碼:
public partial class SysPersonRepository { public string GetValue() { return "直接到DAL"; } }
最后界面展示:
總結:
正確利用注入方式獲得了數據,其實配置形式,更加麻煩,每個站點都要存在一個XML文件。而且配置容易出錯,出現雖然有提示,但是如果一旦數量太多,容易出錯!
代碼下載:http://yunpan.cn/c6XDwfaCY9sff 訪問密碼 8d0e