博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
autofac
阅读量:4613 次
发布时间:2019-06-09

本文共 3137 字,大约阅读时间需要 10 分钟。

/*  User: Peter  Date: 2015/8/10  Time: 19:54                            */   using System;using System.Linq;using System.Collections;using System.Collections.Generic;using Autofac.Extras.Attributed;using Autofac.Features.Metadata;using System.ComponentModel.Composition;using System.Reflection;using System.ComponentModel;using Autofac;namespace testAutofac{        class Testdict:Dictionary
{ public Testdict(string name) { this["name"] = name; } } [MetadataAttribute] class LetterFormatterAttribute : Attribute { public string Name { get; private set; } public int Age { get; private set; } public LetterFormatterAttribute(IDictionary
dict) { Name = dict["Name"].ToString(); Age =int.Parse(dict["Age"].ToString()); } public LetterFormatterAttribute(string name,int Age) { Name = name; this.Age = Age; } } interface ILetterFormatter { string FormatLetter(string content); } [LetterFormatter("Personal2",20)] class ImpersonalLetterFormatter : ILetterFormatter { public ImpersonalLetterFormatter() { Console.WriteLine("ImpersonalLetterFormatter"); } public string FormatLetter(string content) { return "To Whom It May Concern:nn" + content; } } [LetterFormatter("Personal",10)] class PersonalLetterFormatter : ILetterFormatter { public PersonalLetterFormatter() { Console.WriteLine("PersonalLetterFormatter"); } public string FormatLetter(string content) { return "Dear Individual,nn" + content; } } interface ITop { string FormatLetter(string name ,string content); } class Top:ITop { IEnumerable
, LetterFormatterAttribute>> _letters; public Top(IEnumerable
, LetterFormatterAttribute>> letters) { _letters = letters; } public string FormatLetter(string name ,string content) { var letterPersonal = _letters.First( x=> { Console.WriteLine(x.Metadata.Age); return x.Metadata.Name==name ; } ); return letterPersonal.Value.Value.FormatLetter(content); } } class Program { public static void Main(string[] args) { var builder = new ContainerBuilder(); builder.RegisterModule
(); builder.RegisterAssemblyTypes(typeof(Program).Assembly) .AsImplementedInterfaces(); var container = builder.Build(); var top = container.Resolve
(); Console.WriteLine(top.FormatLetter("Personal2","aaa")); Console.ReadKey(true); } }}

主要测试autofac 的注入

IEnumerable<Meta<Lazy<ILetterFormatter>, LetterFormatterAttribute>>

一个接口实现多类,用Attribute来判断那个可以使用。

  <package id="Autofac" version="3.1.0" targetFramework="net40" />

  <package id="Autofac.Extras.Attributed" version="3.1.0" targetFramework="net40" />

 

Attribute类一定要有一个构造有参数IDictionary<string, object>, autofac通过这个反射入值。

 

转载于:https://www.cnblogs.com/peteryu007/p/4727847.html

你可能感兴趣的文章
Android布局学习
查看>>
jQuery中事件绑定与解绑
查看>>
js原生Ajax的封装与使用
查看>>
周总结6
查看>>
PostgreSQL 务实应用(二/5)插入冲突
查看>>
一种公众号回复关键词机制
查看>>
java多线程入门学习(一)
查看>>
基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
查看>>
nyist oj 138 找球号(二)(hash 表+位运算)
查看>>
Movidius软件手册阅读 2017-09-04
查看>>
ytu 1910:字符统计(水题)
查看>>
201671030110 姜佳宇 实验三作业互评与改进
查看>>
mysql-5.6.15 开启二进制文件
查看>>
python的沙盒环境--virtualenv
查看>>
软件自动化测试——入门、进阶与实战
查看>>
BZOJ1878 [SDOI2009]HH的项链 树状数组 或 莫队
查看>>
BZOJ3675 [Apio2014]序列分割 动态规划 斜率优化
查看>>
2016.10.24 继续学习
查看>>
产品功能对标 - 服务授权管理
查看>>
各地IT薪资待遇讨论
查看>>