Tag: dependency injection

如何使用Unity Dependecy Injection Web API实现Strategy / Facade模式

如何告诉Unity.WebApidependency injection框架,在正确的控制器中注入正确的类? DI项目容器 public class UnityContainerConfig { private static IUnityContainer _unityContainer = null; public static IUnityContainer Initialize() { if (_unityContainer == null) { _unityContainer = new Microsoft.Practices.Unity.UnityContainer() .RegisterType(“MyClass1”) .RegisterType(“MyClass2”) } } -MVC PROJECT- public static class UnityConfig { public static void RegisterComponents() { GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(DependencyInjection.UnityContainer.UnityContainerConfig.Initialize()); } } 控制器1: private IMyInterface _myInterface ///MyClass1 public […]

如何在Bootstrapper文件中注册具有多个存储库类型的服务类?

我的一个服务层(ProductService)有4个参数化构造函数。 并且所有4个构造函数都注入了不同的存储库类型。 public class ProductService : IProductService { private IUserDal mUserDal { get; set; } private IItemDal mItemDal { get; set; } private IRoleDal mRoleDal { get; set; } private IBranchDal mBranchDal { get; set; } public ProductService (IUserDal userDal) { mUserDal = userDal; } public ProductService (IItemDal itemDal) { mItemDal = itemDal; } public […]

用统一的其他构造函数解析参数

我正在使用Unity并注入所有依赖项。 假设我有一个像这样的Manager类 public class Manager : IManager { public Manager(IRepository repository, string customerName) { } } 和一个存储库类,如: public class Repository : IRepository { public Repository(string customerName) { } } 我正在使用WCF,并将根据请求解析管理器和存储库。 我在服务启动时注册了所有类型,但在启动时我不知道“customerName”参数。 这将作为参数传递给WCF服务。 哪个会像这样解决经理: public class Service { private IUnityContainer _container; public Service(IUnityContainer container) { _container = container; } public void ServiceCall(string customerName) { var manager […]

任何方式来命名相同类型的倍数?

注意:使用.NET Core 2.0 [Microsoft.Extensions.DependencyInjection]。 这就是我想做的事情: IServiceCollection collection = new ServiceCollection(); collection.AddSingleton(nameof(View1)); collection.AddSingleton(nameof(View2)); 但我无法找到一种方法来命名添加到集合中的服务。 如果在未指定名称的情况下重复使用的类型,则该集合似乎只是用新的服务覆盖现有服务。 理想情况下,我可以重用一个类型,但通过提供名称来区分它。 请忽略这个人为的例子。 问:这可能吗?

将参数传递给ViewModel中的构造函数

我正在构建一个MVVM模式的WPF浏览器应用程序。 我有一个带有dataGrid的第一页(ConsultInvoice)。 当我双击其中一行时,我想导航到另一个页面(EditInvoice),将参数中的选定行传递给我的构造函数。 我知道如果我想做正确的事我应该使用dependency injection,但我真的不知道如何在这里使用它。 我怎样才能简单地传递这个构造函数? ConsultInvoiceViewModel private Invoice _selected; public Invoice Selected { get { return _selected; } set { _selected = value; OnPropertyChanged(“Selected”); } } private void Edit() { EditInvoiceViewModel editInvoice = new EditInvoiceViewModel(Selected); /* doing something here*/ } public ICommand EditCommand { get { return editCommand ?? (editCommand = new RelayCommand(p => […]

‘ServiceCollection’不包含’AddSingleton’的定义

我一直在通过程序类将我的依赖项注册到我的IOC容器,但它变得很乱。 我决定编写一个DI提供程序,它提供并注册了它内部的依赖项。 在我开始解释代码之前,这是VS给出的完整编译错误。 ‘ServiceCollection’不包含’AddSingleton’的定义无法解析符号’AddSingleton’ 我试图尽可能干净,在DependencyProvider包含ServiceCollection类 public class DependencyProvider : ServiceCollection, IDependencyProvider { public DependencyProvider() : base() { Register(); } public void Register() { base.AddSingleton(); // this line errors new ServiceCollection().AddSingleton(); // this line works } } 这是IDependencyProvider接口 public interface IDependencyProvider : IServiceCollection { void Register(); } 我可以不这样做,还是我只是做错了什么? 我真的希望它可能,因为解决方案看起来非常干净,请创建一个新的ServiceCollection实例并使用该字段。 只是为了澄清错误,我无法访问ServiceCollection上的任何基本方法,就像这样 base.AddSingleton(); 但是这条线在内联新实例时起作用 new ServiceCollection().AddSingleton();

Ninject和配置

我以前使用Castle作为IoC但我在同一个项目中使用Nhibernate / Castle(IoC)时遇到了问题,所以我搬到了Ninject。 现在回答这个问题,我有这个课程: class CustomModule : NinjectModule { public override void Load() { Bind().To (); } } Concrete是一个单独的项目, Interfaces.ICafe是一个不同的项目。 使用Castle我曾经给开发人员提供接口DLL并要​​求他实现一个新的具体实现该接口,然后使用app.config配置它,所以无论他实现什么类名,它仍然有效,因为他必须写入app.config,所以如果他像Concrete.Coffee它仍然可以工作。 但是对于Ninject,他必须使用相同的类名“Tea”来制作一个混凝土,以使其工作,否则它将无法工作,因为它是硬编码的。 我是Ninject的新手,我知道可能有些东西我不见了?

ASP.NET Web API的dependency injection

我试图在我的ASP.NET Web API控制器中使用DI。 显然有一些实现。 我只是想知道哪些(Castle,Ninject,unity等)与ASP.NET Web API结合起来最容易配置/维护? 我收到此错误: DI.Controllers.ImportJsonController’没有默认构造函数。 如果我添加一个空构造函数,则忽略带有IFilter的构造函数。 这是我的控制器: public class ImportJsonController : ApiController { private readonly IFilter _filter; public ImportJsonController(IFilter filter) { _filter = filter; } public HttpResponseMessage Post([FromBody]dynamic value) { //do something return response; } }

每个类库的dependency injection容器

所以,这是我第一次处理DI,如果我误解了整个DI,请纠正我。 这些是我的一些项目: Web应用程序/ Web API项目 – 取决于服务类+注入Automapper(仅适用于当前项目的配置) 服务(类库) – 取决于数据类+注入自动映射(配置仅适用于当前项目) 数据(类库) 我的目的是让每个项目都有自己的DI容器(Unity DI说)。 我不确定每个项目都有自己的DI容器。 我已经阅读了一些文章,表明它无法完成(不确定我是否正确解释它们)但我不确定为什么? 如果无法完成,任何人都可以解释它,我如何实现这一点,我不想在应用层DI中的数据层中注册类。 如果每个项目都有自己的DI,那么在注册IMapper作为实例时它会覆盖其他层的IMapper吗?

Microsoft Unity-解决问题

我希望这样做: container.Resolve(); 当它执行此操作时,它将向基础实体对象注入IDependency。 但是,存储在容器中的依赖项需要一个DependencyValue类型的对象,该对象从DependencyFactory提供一个值。 长话短说,我遇到的问题是,当Unity创建实现IDependency的类实例时,我需要接管并插入不在容器中的自定义值。 这是可能的,或者我最好在容器上使用RegisterInstance并手动实例化对象? 我更喜欢使用配置文件来存储映射,然后为参数实例化添加一些逻辑。 这是ParameterOverrides的意图吗? 或者我是否需要为此添加扩展名,或者什么? 谢谢。