C# Unity依赖注入

发表于:2017-6-02 10:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小y    来源:博客园

分享:
  四、方法注入
  方法注入和构造注入差不多,只不过把构造函数变成了一个普通的方法,在方法前面加  [InjectionMethod]  属性。
namespace ThreadDemo.Bll.impl
{
public class UserBll : IUserBll
{
public IUserDal IDal;
/// <summary>
/// 方法注入-加[InjectionMethod]属性
/// </summary>
/// <param name="IUserDal"></param>
[InjectionMethod]
public void SetInjection(IUserDal IUserDal)
{
IDal = IUserDal;
}
/// <summary>
/// 显示信息
/// </summary>
/// <param name="mes"></param>
public void Display(string mes)
{
IDal.Display(mes);
}
}
}
  这几种方法运行结果都是一样的。
  五、Unity.MVC在Web中的应用
  下面的例子是在Unity在Web项目中的使用:
  1、安装Unity.MVC
  2、在目录下会生成一个 BootStrapper.cs  的类文件,打开进行 编辑(如果没有生成,自己创建,名称随意)。
namespace ShowWeatherWebUI
{
public class BootStrapper
{
/// <summary>
/// 获取容器-注册依赖关系
/// </summary>
/// <returns></returns>
public static IUnityContainer Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
return container;
}
/// <summary>
/// 加载容器
/// </summary>
/// <returns></returns>
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
RegisterTypes(container);
return container;
}
/// <summary>
/// 实施依赖注入
/// </summary>
/// <param name="container"></param>
private static void RegisterTypes(UnityContainer container)
{
//依赖关系可以选择代码形式,也可以用配置文件的形式
//UnityConfigurationSection config = (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
//加载到容器
//config.Configure(container, "MyContainer");
container.RegisterType<IUerBll, UerBll>();
container.RegisterType<IUserDal, UserDal>();
}
}
}
  3、在 Global.asax 文件中添加 BootStrapper.Initialise() 的方法。
  因为Global.asax是应用程序启动的时候会执行,所以会去加载容器
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//加载容器-注册依赖
BootStrapper.Initialise();
}
}
  4、在Controller里调用,
  在每个调用的接口添加 [Dependency] 属性即可,也就是属性输入,也可以采用构造函数注入和方法注入。
public class HomeController : Controller
{
[Dependency]
public IUerBll bll { get; set; }
public ActionResult Index()
{
bll.Display("hello");
return View();
}
}
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号