环境:VS2010
未安装MVC3的请先安装微软上有。
我这儿安装了一个NuGet 程序包管理工具(安装Unity组件,也可以使用命令安装,我是新手我也没用过,大家可以试),如果没安的还是得安装。
之前老是在Web.config中配置不起,原来2.0以后Unity的配置用法都变了,最后还是看官网的英文文档,才弄出。
新建一个新建MVC3项目名为:UnityDI
添加Unity的DLL文件
安装好引用中就会下图的组件,并且在项目根目录中我了一个启用Unity容器的类Bootstrapper.cs
下图中是我们要修改的文件或新增的类文件Console/Player.cs,其它的文件都是VS中产生的。
下面是Player.cs代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace UnityDi.Console
{
public abstract class Player
{
public abstract string Play();
}
public class MP3Player : Player
{
public override string Play()
{
return ("this is a MP3Player");
}
}
public class CDPlayer : Player
{
public override string Play()
{
return ("this is a CDPlayer");
}
}
public class DVDPlayer : Player
{
public override string Play()
{
return ("this is a DVDPlayer");
}
}
}
下面是HomeController.cs代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using UnityDi.Console;
namespace UnityDi.Controllers
{
public class HomeController : Controller
{
private readonly Player player;
public HomeController(Player _palyer)
{
player = _palyer;
}
public ActionResult Index()
{
ViewBag.Message = "欢迎使用 ASP.NET MVC!" + player.Play();
return View();
}
public ActionResult About()
{
return View();
}
}
}
下面是Bootstrapper.cs代码:
using System.Web.Mvc;
using Microsoft.Practices.Unity;
using Unity.Mvc3;
using Microsoft.Practices.Unity.Configuration;
using System.Configuration;
using UnityDi.Console;
namespace UnityDi
{
public static class Bootstrapper
{
public static void Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
private static IUnityContainer BuildUnityContainer()
{
//var container = new UnityContainer();
// register all your components with the container here
// it is NOT necessary to register your controllers
// e.g. container.RegisterType<ITestService, TestService>();
IUnityContainer container = new UnityContainer();
UnityConfigurationSection section= (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Configure(container, "containerName");
return container;
}
}
}
下面是Global.asax代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace UnityDi
{
// 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
// 请访问 http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Bootstrapper.Initialise();
}
}
}
下面是Web.config代码:
<?xml version="1.0" encoding="utf-8"?>
<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=152368
-->
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<alias alias="Player" type="UnityDi.Console.Player, UnityDi.Console" />
<alias alias="MP3Player" type="UnityDi.Console.MP3Player, UnityDi.Console" />
<namespace name="UnityDi.Console" />
<assembly name="UnityDi" />
<container name="containerName">
<register type="Player" mapTo="MP3Player"/>
</container>
</unity>
<connectionStrings>
<add name="ApplicationServices"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="1.0.0.0"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages"/>
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
以上传码我都试验过的,个人觉得没有太多人使用Unity所以在网上搜所都是Unity1.0的配置。这么一个配置我弄了一天,还是懒啊,不想看英文的结果。希望对大家有点帮助。