Tag: ioc container

如何在Windows窗体中的构造函数中注入依赖项

在asp.net-mvc中,我有Windsor Controller Factory,它将所有依赖项注入到控制器中,但是如何在Windows窗体中获得它? 例如,如果有这个Form1,我将如何获得Form1的实例,我应该使用resolve(由某个ppl称为ServiceLocator和反模式)? public class Form1 { private IBarService _barService; public Form1(IBarService barService) { _barService = barService; } }

配置Unity以解析采用装饰依赖项的类型,该依赖项的参数随注入的类型而变化

这是一个相当简单的装饰器模式场景,其复杂性在于,装饰类型具有一个构造函数参数,该参数取决于它被注入的类型。 我有这样的界面: interface IThing { void Do(); } 这样的实现: class RealThing : IThing { public RealThing(string configuration) { … implementation … } public void Do() { … implementation … } } 像这样的装饰者: class DecoratingThing : IThing { IThing _innerThing; public DecoratingThing(IThing thing) { _innerThing = thing; } public void Do() { _innerThing.Do(); } } 最后,我有一些需要IThing类型,称为Depender1 […]

MEF:我应该把CompositionContainer放在哪里?

我一直在使用Windsor IoC Container作为基于Web的应用程序,以解决应用程序应该使用的数据访问层实现。 Web应用程序的UI将由页面组成,每个页面由称为portlet的小单元组成。 (它们的概念有点类似于小部件。)这些所谓的portlet基本上是Web控件,可以在运行时为每个页面进行静态配置。 该应用程序将附带一些内置的,但我希望能够轻松扩展它。 我发现这个机制正是MEF的构建方式。 所以我决定以这样的方式实现系统,即它使用MEF发现portlet。 然后,我意识到它也可以做我目前使用的温莎,所以我决定放弃温莎而不是MEF。 显然,我将不得不使用DirectoryCatalog,它扫描应用程序的bin文件夹中的.dll并返回我需要的所有内容。 我在StackOverflow中阅读了一些有关MEF的教程,示例和所有问题。 我认为使用MEF的最简单方法是通过Glenn Block在其教程中提到的PartInitializer,但我意识到它不在MEF中。 实际上,它是我从CodePlex下载的代码,但是在一个单独的程序集中,并且只在源代码中,而不是以二进制forms。 (这是否意味着它不是MEF的一部分?或者将它放到一个单独的项目中有什么意义?)然后,我意识到它适用于Silverlight,所以它并没有真正帮助我。 (或者我应该只针对.NET 3.5编译它,还是将它包含在我的项目中,我很高兴去?) 所以现在我遇到了以下问题:我应该将CompositionContainer放在我的应用程序中? 还有一件事我想考虑一下:我应该在应用程序的生命周期中只使用一个CompositionContainer,或者我最好在每次需要时创建一个容器?

使用unity解析具有多个构造函数的实例

我想使用unity创建一个类的实例,其中类有两个具有相同参数数量的构造函数。 这是实例化: _unityContainer.Resolve(new ParameterOverride(“gradeTypeStringFromXmlFile”, gradeTypeStringFromXmlFile)); 以下是构造函数: public GradeType(string gradeTypeStringFromXmlFile) { _gradeTypeStringFromXmlFile = gradeTypeStringFromXmlFile; } public GradeType(Enum.GradeType gradeType) { _gradeType = gradeType; } 如果我尝试这样做,我得到一个例外,说明类型GradeType有多个长度为1的构造函数。无法消除歧义 。 我可以在一个构造函数上设置属性[InjectionConstructor]以使其与一个一起工作,但是我不能使用另一个构造函数创建一个具有unity的实例。 是否有一些方法让多个构造函数具有相同数量的参数并仍然使用unity来创建实例?

autofac的Func 来解析命名服务

鉴于注册服务: builder.RegisterType().Named(“one”).As(); builder.RegisterType().Named(“two”).As(); builder.RegisterType().Named(“three”).As(); 我可以通过注入类似Func东西来检索IFoo接口的命名实现吗? public class SomeClass(Func foo) { var f = foo(“one”); Debug.Assert(f is Foo1); var g = foo(“two”); Debug.Assert(g is Foo2); var h = foo(“three”); Debug.Assert(h is Foo3); } 我知道我可以用Meta做,但我不想用它。

Cru代码。 IoC来救援

关于IoC Container的实用性问题 ,获奖提交者提到,使用IoC容器,您可以采取以下措施: public class UglyCustomer : INotifyPropertyChanged { private string _firstName; public string FirstName { get { return _firstName; } set { string oldValue = _firstName; _firstName = value; if(oldValue != value) OnPropertyChanged(“FirstName”); } } private string _lastName; public string LastName { get { return _lastName; } set { string oldValue = value; _lastName […]

动态菜单创建IoC

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

Autofac DbContext已被处理

我已经阅读过这篇文章DbContext已经处理掉并且autofac但是我仍然得到同样的错误: 由于已经处理了DbContext,因此无法完成操作。 public class EFRepository : IRepository { private EFDbContext context; public EFRepository(EFDbContext ctx) { context = ctx; } public TEntity FirstOrDefault(Expression<Func> predicate, params Expression<Func>[] includes) where TEntity : class, IContextEntity { IQueryable query = includes.Aggregate<Expression<Func>, IQueryable> (context.Set(), (current, expression) => current.Include(expression)); return query.FirstOrDefault(predicate); } } 而在Global.asax中 ContainerBuilder builder = new ContainerBuilder(); builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.Register(c => […]

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进行工厂模式的最佳方法是什么?

如何避免服务定位器模式? 我是不是该?

我正在开发一个WinForms系统(我知道),在创建表单时有很多Constructor Injection ,但如果这些表单/视图需要打开另一个表单,我发现DI容器已经注入,以便我们可以找到在运行时实现所需的视图接口。 例如 public partial class MyView : Form, IMyView { private readonly IDIContainer _container; public MyView(IDIContainer container) { InitializeComponent(); _container = container; } public OpenDialogClick(object sender, EventArgs e) { var dialog = container.Resolve(); dialog.ShowDialog(this); } } 我知道这基本上是使用容器作为服务定位器。 我一再被告知这被认为是一种反模式,所以我想避免这种用法。 我可以将视图作为构造函数的一部分注入,如下所示: public partial class MyView : Form, IMyView { private readonly IDialogView _dialog; public MyView(IDialogView […]