Microsoft Unity – xml代码

有人可以提供我应该与企业库4.1中的Microsoft Unity应用程序块一起使用的XML配置,以实现与以下相同的结果吗?

using System; using Microsoft.Practices.Unity; using Microsoft.Practices.Unity.InterceptionExtension; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { IUnityContainer container = new UnityContainer(); container.AddNewExtension(); container.RegisterType(); container.Configure().SetInterceptorFor(new InterfaceInterceptor()); var logger = container.Resolve(); logger.Write("World."); Console.ReadKey(); } } public interface ILogger { [Test] void Write(string message); } public class Logger : ILogger { public void Write(string message) { Console.Write(message); } } public class TestAttribute : HandlerAttribute { public override ICallHandler CreateHandler(IUnityContainer container) { return new TestHandler(); } } public class TestHandler : ICallHandler { public int Order { get; set; } public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) { Console.Write("Hello, "); return getNext()(input, getNext); } } } 

所以不是这样的:

  IUnityContainer container = new UnityContainer(); container.AddNewExtension(); container.RegisterType(); container.Configure().SetInterceptorFor(new InterfaceInterceptor()); 

我会这样的:

  IUnityContainer container = new UnityContainer(); UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); section.Containers.Default.Configure(container); 

使用XML配置文件。

我自己找到了答案:

    

再次,C#代码:

 using System; using System.Configuration; using Microsoft.Practices.Unity; using Microsoft.Practices.Unity.Configuration; using Microsoft.Practices.Unity.InterceptionExtension; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //IUnityContainer container = new UnityContainer(); //container.AddNewExtension(); //container.RegisterType(); //container.Configure().SetInterceptorFor(new InterfaceInterceptor()); IUnityContainer container = new UnityContainer(); UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); section.Containers["ConfigureInterceptorForType"].Configure(container); var logger = container.Resolve(); logger.Write("World."); Console.ReadKey(); } } public interface ILogger { [Test] void Write(string message); } public class Logger : ILogger { public void Write(string message) { Console.Write(message); } } public class TestAttribute : HandlerAttribute { public override ICallHandler CreateHandler(IUnityContainer container) { return new TestHandler(); } } public class TestHandler : ICallHandler { public int Order { get; set; } public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) { Console.Write("Hello, "); return getNext()(input, getNext); } } } 

可以在没有Test属性的情况下完成吗? 纯粹来自XML。 只需指定拦截接口,它将截取所有或匹配的方法?

我使用Unity 2编写了一个样本,它与之前的答案非常相似。 可以在以下位置查看:

http://hmadrigal.wordpress.com/2010/12/25/aspect-oriented-programming-and-interceptor-design-pattern-with-unity-2/

最好的问候,赫伯