まずサンプル用にコンソールアプリを作成してから以下のクラスを追加していきます。
【SampleExtension.cs】
using Microsoft.Practices.Unity; using Microsoft.Practices.EnterpriseLibrary.PolicyInjection.ObjectBuilder; using Microsoft.Practices.Unity.ObjectBuilder; namespace EntLib4Study { public class SampleExtension : UnityContainerExtension { public new ExtensionContext Context { get { return base.Context; } } protected override void Initialize() { this.Context.Strategies.AddNew<PolicyInjectionStrategy>(UnityBuildStage.PreCreation); this.Context.Policies.SetDefault<IPolicyInjectionPolicy>(new PolicyInjectionPolicy(true)); } } }【SampleCallHandler.cs】
using Microsoft.Practices.EnterpriseLibrary.PolicyInjection; namespace EntLib4Study { public class SampleCallHandler : ICallHandler { private int order = 0; public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) { Console.WriteLine("前処理実行!"); input.MethodBase.Invoke(input.Target, null); Console.WriteLine("後処理実行!"); return input.CreateMethodReturn(null, input.Arguments); } public int Order { get { return order; } set { order = value; } } } }【SampleCallHandlerAttribute】
using Microsoft.Practices.EnterpriseLibrary.PolicyInjection; namespace EntLib4Study { public class SampleCallHandlerAttribute : HandlerAttribute { public SampleCallHandlerAttribute() { } public override ICallHandler CreateHandler() { return new SampleCallHandler(); } } }ここまで追加できたら、あとは呼び出しコードを記述して実行するだけです。
class Program { static void Main(string[] args) { IUnityContainer myContainer = new UnityContainer(); myContainer.AddExtension(new SampleExtension()); myContainer.RegisterType<ILog, Log1>(); ILog logger = myContainer.Resolve<ILog>(); logger.Output(); Console.ReadLine(); } } public interface ILog { void Output(); } public class Log1 : ILog { [SampleCallHandler] public void Output() { Console.WriteLine("サンプル出力1"); } }実行すると、
※古いMTはpreやcodeだと極小フォントになるので見づらいですが、コピペして適当なエディタにはって頂ければ見やすいかと(^^;
Posted by GAMMARAY at 2008年08月05日 15:21
| TrackBack