Tag: inversion of control

structuremap – 同一接口的两个实现

我有一个服务类与以下ctor: public class (IMessageService emailService, IMessageService smsService) { … } 以及IMessageService (电子邮件和短信)的两种实现。 如何配置容器以正确解析此构造函数? 这是命名实例进入的地方,还是另一种情况?

使用Simple Injector在C#中实现域事件处理程序模式

我正在尝试使用Simple Injector在C#中实现域事件模式。 我已经将我的代码简化为一个文件,该文件可以作为控制台应用程序运行,并且已经排除了Simple Injector代码,以便为此问题保持清晰。 我IEvent的问题是每个事件可能有多个事件处理程序,并且可能会引发多个事件,但我想限制我的Dispatcher只处理实现IEvent接口的事件,所以我把这个限制放在我的Dispatch方法上。 这导致了如何从Simple Injector获取实例的问题,因为每次调用Dispatch方法时TEvent都是IEvent类型(正如我所期望的那样)但是我需要获取传入的事件类型以便我可以获得相关的Simple Injector的处理程序。 希望我的代码能够更好地解释这个: interface IEvent { } interface IEventHandler where T : IEvent { void Handle(T @event); } class StandardEvent : IEvent { } class AnotherEvent : IEvent { } class StandardEventHandler : IEventHandler { public void Handle(StandardEvent @event) { Console.WriteLine(“StandardEvent handled”); } } class AnotherEventHandler : IEventHandler { […]

将DI容器使用保留在Silverlight和MVVM中的组合根目录中

我不太清楚我是如何设计的,所以我在Silverlight + MVVM应用程序的组合根目录中保留对DI容器的引用。 我有以下简单的使用场景:有一个主视图(可能是一个项目列表)和一个打开一个项目的编辑视图的操作。 因此,主视图必须在用户执行操作时创建并显示编辑视图(例如,单击某个按钮)。 为此,我有以下代码: public interface IView { IViewModel ViewModel {get; set;} } 然后,对于我需要能够创建的每个视图,我都有一个抽象工厂,就像这样 public interface ISomeViewFactory { IView CreateView(); } 然后将此工厂声明为“父”视图模型的依赖项,如下所示: public class SomeParentViewModel { public SomeParentViewModel(ISomeViewFactory viewFactory) { // store it } private void OnSomeUserAction() { IView view = viewFactory.CreateView(); dialogService.ShowDialog(view); } } 所以一切都很好,直到这里,没有DI容器在视线:)。 现在来了ISomeViewFactory的实现: public class SomeViewFactory : ISomeViewFactory { […]

UnityContainer.Resolve或ServiceLocator.GetInstance?

这似乎是一个愚蠢的问题,因为在我的代码中一切正常,但我用我的Unity容器_ambientContainer以这种方式注册了单例: _ambientContainer.RegisterType(new ContainerControlledLifetimeManager()); 为了避免使用我的本地字段,我使用: get { return ServiceLocator.Current.GetInstance(); } 在我的get属性中获取我的对象的实例。 这样我总是得到相同的实例( Application.StateContext仍然是单例)或者GetInstance创建了一个新实例? 是否更好地使用本地_ambientContainer字段? get { return _ambientContainer.Resolve(); } 谢谢。

动态菜单创建IoC

我想知道是否有人在那里知道如何创建我如何使用像AutoFac这样的东西让我动态允许dll创建自己的表单和菜单项来在运行时调用它们。 所以如果我有, Employee.dll 新的入门表格 证书表格 Supplier.dll 供应商详细信息 产品表格 在我的winform应用程序中,它会创建一个菜单,当每个单击加载相关表单时 人 新的入门 证书 供应商 供应商详情 制品 所以我可以为项目添加一个新的类库,它只是在加载时将它添加到菜单中。 希望有意义,有人可以帮助我。 干杯 艾丹

C# – Ninject,IoC和工厂模式

我有一个控制台应用程序,我需要根据用户的输入执行某个function。 如果用户输入“function1” – >我执行function1,依此类推。 我正在尝试将此项目编写为尽可能干净且通用,我想使用IoC和SOLID概念,我有点卡住了。 到目前为止我所拥有的: public interface IFeature { String execFeature(); } 和 interface IFeatureFactory { IFeature createFeature(String input); } 我的第一个想法只是在具体的Factory类上有一个关于用户输入的开关案例 ,并相应地创建具体的function ,但我敢打赌,有一个更好的方法来使用IoC 。 我读了Ninject工厂扩展,但不明白如何在我的项目中使用它。 使用IoC / Ninject进行工厂模式的最佳方法是什么?

通过通用接口/抽象类实现使.NET Core DI自动解析类

.NET Core中是否有一种方法可以注册通用接口,并使其解析与某个实现相匹配的类。 例如,我有以下界面: public interface IMapper { } 我还有一个抽象类: public abstract class Mapper : IMapper { protected Mapper() { // some generic stuff } public abstract TTo Map(TFrom); } 然后我可以创建一个这样的实现: public class UserMapper : Mapper { public override Entity.User Map(Domain.User from) { // do mapping } } 有没有办法,使用默认的.NET Core DI注册IMapper ,让它自动解析类? 因此,如果我在代码中的某个地方执行此操作: class SomeClass { […]

在NInject中实现OnePerSessionBehavior

我想为NInject(v1.0)创建一个OnePerSessionBehavior,我大部分时间都在使用它。 剩下的唯一问题是如何使用.WithArguments()传递新参数,因为每个新会话都要求容器中的内容。 现在我将容器的引用保留为应用程序变量,因此模块只能加载一次,所以绑定只发生一次。 例如,以下内容返回每个新会话的“Something”的单个实例,但传递给所有会话的构造函数参数是相同的DateTime。 Bind() .To() .Using() .WithArgument(“currentDateTime”, DateTime.Now);

Automapper自定义解析器 – 将存储库注入构造函数

我正在尝试为automapper创建一个自定义解析器,它需要访问我的一个数据存储库来检索登录的用户帐户。 这是我到目前为止的代码…… public class FollowingResolver : ValueResolver { readonly IIdentityTasks identityTasks; public FollowingResolver(IIdentityTasks identitTasks) { this.identityTasks = identitTasks; } protected override bool ResolveCore(Audio source) { var user = identityTasks.GetCurrentIdentity(); if (user != null) return user.IsFollowingUser(source.DJAccount); return false; } } 但是我收到此错误: FollowingResolver’ does not have a default constructor 我尝试添加一个默认的contrstructor,但我的存储库永远不会被初始化。 这是我的autoampper初始化代码: public static void Configure(IWindsorContainer container) { […]

Unity将exception包装到ResolutionFailedException。 怎么避免?

我想知道,是否有可能要求Unity“不要在解决时包装任何用户exception”? 真的,为什么Unity会对ResolutionFailedException进行包装? 它正在改变“建筑服务合同”,恕我直言,使用统一对象初始化的事实应该是透明的,这意味着如果客户端等待来自“new”运算符的IOException的示例它应该将其解包,甚至对象也是使用Unity创建的。 其他IoC容器的行为是否相同?