Tag: inversion of control

DI和存储库模式

目前,我的代码与此类似(缩短只是为了说明一点): DAL 存储库接口 public interface IRepository { IList GetAll(); TEntity Get(TKey id); TEntity Add(TEntity item); TEntity Update(TEntity item); bool Remove(TKey id); } 基本EF存储库 public class BaseEFRepository : IRepository where TEntity: class, IEntity where TKey: struct { protected readonly DbContext _dbContext; public BaseRepository() { _dbContext = new MyDB(); _dbContext.Configuration.ProxyCreationEnabled = false; _dbContext.Configuration.LazyLoadingEnabled = false; } public […]

删除了C#和IoC传递依赖项

我有一个解决方案,我使用IoC(windsor)。 解决方案中的项目如下: 接口 – 保存我将使用的所有接口契约。 IoC.Installers – 保存我的依赖项的所有安装程序(引用了impl。和接口) IoC – 保存包含IoC容器的单例类。 该类执行容器的初始化过程。 控制台 – 使用IoC解决依赖关系的项目(参考IoC接口) 问题:因为IoC项目没有直接使用IoC.Installers项目,所以在Console项目的构建过程中省略了它,因此在初始化过程中没有找到安装程序。 解决方法:在IoC项目中,我添加了一个静态构造函数,它直接从IoC.Installers项目启动安装程序并使用它(我在我做的实例上执行GetType()) 解决方法的问题:我想创建一些通用的容器持有者,我可以从解决方案转移到解决方案,而无需修复我的hack。 是否有更好的方法强制IoC.Installers DLL被复制到bin文件夹而不进行黑客攻击? 最终目标是创建一个包裹castlewindsor的nuget,并尝试找到解决方案中的所有安装程序并安装它们 我正在添加一个git仓库链接 ,我在其中创建了一个可以重现问题的项目(它还包含了解决方法) 谢谢!

特定于环境的StructureMap配置?

回到我使用StructureMap 2.6时,我能够通过将PullConfigurationFromAppConfig设置为TRUE来从配置中提取配置数据。 这有助于我根据构建配置覆盖实例。 在最新版本中,这似乎已不复存在。 如何通过配置文件指定自定义实例,特别是web.config (我目前正在根据构建配置进行转换)。 这可能吗? 还有另一个支持这个的IoC框架吗? 谢谢。

Ninject – 静态类中的内核?

是否正确使用所需的NinjectModule在一个单独的共享库中的静态类中“包装”一个StandardKernel并在需要注入时使用相同的库(而不是每次都实例化一个新内核)? 编辑:我正在尝试从我正在开发的WCF服务中使用Ninject。 (如果我刚开始学习DI和IoC容器,我说的话完全不好意思,请耐心等待)

在Castle Windsor的其他课程之间共享课程实例

我试图找出在依赖它的两个其他类之间共享类的实例的最佳方法。 说我有这些课程: class A { public A(B b, C c) {} } class B { public B(IDFactory factory) {} } class C { public C(IDFactory factory) {} } interface IDFactory { D GetD(); } class D {} 对于A每个实例,我希望c和d使用的D是D的单个实例。 当我创建A的新实例(比如使用工厂)时,我希望c和d共享一个新的D实例。 到目前为止,我已经认为使用使用上下文的自定义生活方式(使用这个很酷的库)可能是最好的方法。 所以我会做这样的事情: WindsorContainer container = new WindsorContainer(); [.. standard container registration stuff ..] container.Register(Component.For().LifeStyle.Custom()); IAFactory factory […]

Microsoft Unity – xml代码

有人可以提供我应该与企业库4.1中的Microsoft Unity应用程序块一起使用的XML配置,以实现与以下相同的结果吗? using System; using Microsoft.Practices.Unity; using Microsoft.Practices.Unity.InterceptionExtension; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { IUnityContainer container = new UnityContainer(); container.AddNewExtension(); container.RegisterType(); container.Configure().SetInterceptorFor(new InterfaceInterceptor()); var logger = container.Resolve(); logger.Write(“World.”); Console.ReadKey(); } } public interface ILogger { [Test] void Write(string message); } public class Logger : ILogger { public void Write(string message) […]

Unity – 通过XML工厂

我使用Unity框架作为IoC容器。 我的Config看起来像这样: 我想注册一个容器来使用工厂方法。 我如何使用app.config实现它? 我正在寻找这样的东西: 有什么建议吗?

使用Castle Windsor IoC容器在组件注册期间设置Name属性

在我的应用程序中,我有一个名为Message的类。 Message类中存在一个名为MessageType的字符串类型的属性。 MessageType属性用于警告应用程序,以确定Message类实例中将存在哪些数据模式。 Message类派生自名为IMessage的接口。 作为一个例子,假设我们有一个Message类的实例,其MessageType属性的值为“com.business.product.RegisterUser”。 每个MessageType模式都有一个相应的消息处理程序类(MessageHandler),它派生自IMessageHandler接口。 在上面的例子中,会有一个名为RegisterUserMessageHandler的类。 所有消息处理程序类都派生自IMessageHandler。 IMessageHandler定义了一个GetMessageType函数,该函数将返回派生消息实例的MessageType属性。 在使用Castle Windsor IoC容器注册类/组件期间,我想将Name属性设置为Message实例的MessageType属性的值。 我还想使用’通过约定注册组件’方法来注册这些类/组件来完成此任务。 本练习的最终目的是允许我的代码使用Message的MessageType属性调用Resolve方法以获取正确的消息处理程序实例。 例如: string messageType = “com.business.product.RegisterUser”; IMessageHandler registerUserMessageHandler = _container.Resolve(messageType); 我很感激任何帮助来解决这个问题。 非常感谢。

LightInject IoC容器在解析类型时抛出stackoverflow

在尝试LightInject IoC容器http://www.lightinject.net/时,它会在解析ISomeService类型时抛出stackoverflowexception: 所有类型都在App_Start中注册: container.RegisterAssembly(“MyApp*.dll”); 然后,当我尝试在控制器中解决它时,它会失败并抛出stackoverflowexception: public SomeController(ISomeService someService) { _someService = someService; } 使用ServiceLocator时也会出现相同的错误: ServiceLocator.Current.GetInstance(); 我已经跟踪了它,我可以看到它在LightInject ServiceContainer类中失败了,但是我不明白为什么它失败了。 public object GetInstance(Type serviceType) { return GetDefaultDelegate(serviceType, true)(constants.Items); } 在调用GetDefaultDelegate之后,执行路径再次在GetInstance中结束,导致无限循环和堆栈溢出。 编辑2 – 已进一步跟踪此问题,它似乎是由SomeService同时具有构造函数和属性注入引起的: public class SomeService : ISomeService { public IAnotherService AnotherService { get; set; } public SomeService(IAnotherService anotherService) { AnotherService = anotherService; } } 依赖IAnotherService AnotherService是通过构造函数和属性注入的,但是无意使用属性注入器。 编辑3 […]

Ninject 2.1 ActivationException:激活字符串时出错

我很困惑为什么我收到“Ninject.ActivationException:错误激活字符串没有匹配的绑定可用,并且类型不可自绑定”在随机绑定中。 如果我保留IMedia的绑定,它将抛出ActivationException,但是如果我使用CallbackProvider它就可以工作。 所有这些类的结构都相同,只有几个不同的属性。 我很困惑为什么ILocationType,IMedia和IFarmDataContext抛出ActivationException而其他人没有。 有任何想法吗? /****************************** * Core Types ******************************/ Bind().ToProvider(new CallbackProvider(delegate { return new FarmDataContext(); })); //Media Bind().To(); //blows up //Bind().ToProvider(new CallbackProvider(delegate { return new Media(); })); Bind().To(); Bind().To(); //Location Bind().To(); Bind().ToProvider(new CallbackProvider(delegate { return new LocationType(); })); Bind().To();