使用 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 Core Web API中使用SwaggerASP.NETWebAPISwagger
- 使用靜態基類方案讓 ASP.NET Core 實現遵循 HATEOAS Restful Web APIASP.NETRESTWebAPI
- ASP.NET Web API 中使用 swagger 來管理 API 文件ASP.NETWebAPISwagger
- 使用 ASP.NET Core 和 MongoDB 建立 Web APIASP.NETMongoDBWebAPI
- 使用Domain-Driven建立Hypermedia APIAIAPI
- ASP.NET Core Web API下基於Keycloak的多租戶使用者授權的實現ASP.NETWebAPI
- ASP.NET Core Web API 與 SSLASP.NETWebAPI
- ASP.NET Core Web API 介面限流ASP.NETWebAPI
- ASP.NET Core Web API 整合測試中使用 Bearer TokenASP.NETWebAPI
- ASP.NET Core 實戰:使用 ASP.NET Core Web API 和 Vue.js,搭建前後端分離框架ASP.NETWebAPIVue.js後端框架
- ASP.NET Core Web API 整合測試ASP.NETWebAPI
- ASP.NET Core Web Api之JWT(一)ASP.NETWebAPIJWT
- 讓ASP.NET Web API的Action方法ASP.NETWebAPI
- ASP.NET Core Web API 教程 - Project ConfigurationASP.NETWebAPIProject
- 使用 dynamic 型別讓 ASP.NET Core 實現 HATEOAS 結構的 RESTful API型別ASP.NETRESTAPI
- AreaHttpControllerSelector 對 Web Api 實現 Area 路由控制HTTPControllerWebAPI路由
- .net Framework Web Api 實現多國語FrameworkWebAPI
- C# ASP.NET Core Web API 框架 實現向手機傳送驗證碼簡訊C#ASP.NETWebAPI框架
- ASP.NET Core Web API 索引 (更新Redis in .NET Core)ASP.NETWebAPI索引Redis
- ASP.NET Core Web API 流式返回,逐字顯示ASP.NETWebAPI
- IoC在ASP.NET Web API中的應用ASP.NETWebAPI
- UNIX Domain Socket實現簡易聊天AI
- 【ASP.NET Core】體驗一下 Mini Web APIASP.NETWebAPI
- ASP.NET Core Web API + Identity Server 4 + Angular 6 實戰小專案視訊ASP.NETWebAPIIDEServerAngular
- 針對ASP.NET Core Web API的先進架構ASP.NETWebAPI架構
- ASP.NET Core Web Api之JWT重新整理Token(三)ASP.NETWebAPIJWT
- ASP.NET Core Web Api之JWT VS Session VS Cookie(二)ASP.NETWebAPIJWTSessionCookie
- 舊 WCF 專案成功遷移到 asp.net core web apiASP.NETWebAPI
- 呼叫ASP.NET Web API不能傳送PUT/DELETE請求ASP.NETWebAPIdelete
- 使用 ASP.NET Core MVC 建立 Web API——響應資料的內容協商(七)ASP.NETMVCWebAPI
- 在 ASP.NET Core Web API中使用 Polly 構建彈性容錯的微服務ASP.NETWebAPI微服務
- JavaScript Sanitizer API:原生WEB安全API出現啦JavaScriptAPIWeb
- Web SSH 的原理與在 ASP.NET Core SignalR 中的實現WebASP.NETSignalR
- 如何在 ASP.NET Core 中使用 API AnalyzerASP.NETAPI
- Asp.Net web api基於自定義Filter的安全認證ASP.NETWebAPIFilter
- SpringBoot使用Swagger2實現Restful APISpring BootSwaggerRESTAPI
- asp.net core 實現 face recognition 使用 tensorflowjs(原始碼)ASP.NETJS原始碼
- 或許是你應該瞭解的一些 ASP.NET Core Web API 使用小技巧ASP.NETWebAPI
- Asp.Net Core 3.1 學習4、Web Api 中基於JWT的token驗證及Swagger使用ASP.NETWebAPIJWTSwagger