使用 Ninject and ASP.Net Web API 實現Domain Events
Domain Events with Ninject and ASP.Net Web API | Contented Coder Blog
該部落格談論了使用Ninject依賴注射的方法實現領域事件,個人認為這與DCI實現方式非常類似,都是結構上組合。
假設Domain events程式碼如下:
其中IEventContainer是一個介面:
IEventContainer的NInject實現程式碼如下:
這個實現依賴於DI核心IKernerl,關鍵的程式碼如下:
該部落格談論了使用Ninject依賴注射的方法實現領域事件,個人認為這與DCI實現方式非常類似,都是結構上組合。
假設Domain events程式碼如下:
public static class DomainEvents { /// <summary> /// The _actions. /// </summary> /// <remarks>Marked as ThreadStatic that each thread has its own callbacks</remarks> [ThreadStatic] private static List<Delegate> _actions; /// <summary> /// The container /// </summary> public static IEventContainer Container; /// <summary> /// Registers the specified callback for the given domain event. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="callback">The callback.</param> public static void Register<T>(Action<T> callback) where T : IDomainEvent { if (_actions == null) _actions = new List<Delegate>(); _actions.Add(callback); } /// <summary> /// Raises the specified domain event and calls the event handlers. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="domainEvent">The domain event.</param> public static void Raise<T>(T domainEvent) where T : IDomainEvent { if (Container != null) foreach (var handler in Container.Handlers(domainEvent)) handler.Handle(domainEvent); // registered actions, typically used for unit tests. if (_actions != null) foreach (var action in _actions) if (action is Action<T>) ((Action<T>)action)(domainEvent); } } <p class="indent"> |
其中IEventContainer是一個介面:
public interface IEventContainer { IEnumerable<IDomainEventHandler<T>> Handlers<T>(T domainEvent) where T : IDomainEvent; } <p class="indent"> |
IEventContainer的NInject實現程式碼如下:
public class NinjectEventContainer : IEventContainer { private readonly IKernel _kernerl; public NinjectEventContainer(IKernel kernal) { _kernerl = kernal; } public IEnumerable<IDomainEventHandler<T>> Handlers<T>(T domainEvent) where T : IDomainEvent { return _kernerl.GetAll<IDomainEventHandler<T>>(); } } <p class="indent"> |
這個實現依賴於DI核心IKernerl,關鍵的程式碼如下:
private static IKernel CreateKernel() { var kernel = new StandardKernel(); kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel); kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); // this is our concrete implementation of handler for winner selected event kernel.Bind<IDomainEventHandler<WinnerSelectedEvent>>().To<WinnerSelectedHandler>(); GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel); // ** WIRE UP DOMAIN EVENTS CONTAINER ** DomainEvents.Container = new NinjectEventContainer(kernel); return kernel; } <p class="indent"> |
相關文章
- [ASP.NET MVC 小牛之路]05 - 使用 NinjectASP.NETMVC
- 使用ASP.NET Web API構建RESTful APIASP.NETWebAPIREST
- javascript使用web proxy來實現ajax cross-domain通訊JavaScriptWebROSAI
- ASP.NET Web API通過ActionFilter來實現快取ASP.NETWebAPIFilter快取
- ASP.NET Web API實現快取的2種方式ASP.NETWebAPI快取
- ASP.NET Web API中通過ETag實現快取ASP.NETWebAPI快取
- 聊聊asp.net中Web Api的使用ASP.NETWebAPI
- 使用靜態基類方案讓 ASP.NET Core 實現遵循 HATEOAS Restful Web APIASP.NETRESTWebAPI
- ASP.NET Web API與Rest web api(一)ASP.NETWebAPIREST
- Asp.Net Web API 2第十課——使用OWIN自承載Web APIASP.NETWebAPI
- 使用Domain-Driven建立Hypermedia APIAIAPI
- ASP.NET Web API實踐系列01,以ASP.NET Web Form方式寄宿ASP.NETWebAPIORM
- ASP.NET Web API 自定義MediaType實現jsonp跨域呼叫ASP.NETWebAPIJSON跨域
- ASP.NET Web API 通過Authentication特性來實現身份認證ASP.NETWebAPI
- ASP.NET Web API 特性ASP.NETWebAPI
- ASP.NET Web API 路由ASP.NETWebAPI路由
- ASP.NET Web API 中使用 swagger 來管理 API 文件ASP.NETWebAPISwagger
- 【ASP.NET Web API教程】2 建立各種Web APIASP.NETWebAPI
- ASP.NET Core Web API中使用SwaggerASP.NETWebAPISwagger
- 使用ASP.NET web API建立REST服務(二)ASP.NETWebAPIREST
- ASP.NET Web API與Owin OAuth:呼叫與使用者相關的Web APIASP.NETWebAPIOAuth
- ASP.NET Core Web API下基於Keycloak的多租戶使用者授權的實現ASP.NETWebAPI
- ASP.NET Core Web API 介面限流ASP.NETWebAPI
- ASP.NET Core Web API 與 SSLASP.NETWebAPI
- ASP.NET Web API 中文版ASP.NETWebAPI
- ASP.NET Web API 應用教程(一) ——資料流使用ASP.NETWebAPI
- ASP.NET Web API 應用教程(一) ——資料流使用ASP.NETWebAPI
- ASP.NET Web API與Owin OAuth:使用Access Toke呼叫受保護的APIASP.NETWebAPIOAuth
- Using NInject Do DI(3) In Asp.net MVC4ASP.NETMVC
- ASP.NET Core 實戰:使用 ASP.NET Core Web API 和 Vue.js,搭建前後端分離框架ASP.NETWebAPIVue.js後端框架
- Web API--入門--(一)ASP.NET Web API 2(C#)入門WebAPIASP.NET
- ASP.NET Core Web API 整合測試中使用 Bearer TokenASP.NETWebAPI
- ASP.NET Core Web Api之JWT(一)ASP.NETWebAPIJWT
- 讓ASP.NET Web API的Action方法ASP.NETWebAPI
- ASP.NET Core Web API 整合測試ASP.NETWebAPI
- [ASP.NET MVC 小牛之路]18 - Web APIASP.NETMVCWebAPI
- ASP.NET Web API 2 入門教程ASP.NETWebAPI
- ASP.NET Web API實踐系列05,訊息處理管道ASP.NETWebAPI