Tag: inversion of control

在单身人士背后提取IoC容器 – 做错了吗?

通常,我喜欢让应用程序完全不知道IoC容器。 但是我遇到了需要访问它的问题。 为了消除痛苦,我使用了一个基本的单身人士。 在你跑山或拉出霰弹枪之前,让我回顾一下我的解决方案。 基本上,IoC单例绝对没有任何东西,它只是委托给必须传入的内部接口。我发现这使得使用Singleton减少痛苦。 下面是IoC包装器: public static class IoC { private static IDependencyResolver inner; public static void InitWith(IDependencyResolver container) { inner = container; } /// Container has not been initialized. Please supply an instance if IWindsorContainer. public static T Resolve() { if ( inner == null) throw new InvalidOperationException(“Container has not been initialized. Please […]

Simple Injector在BaseClass中注入多个依赖项

我有一个BaseViewModel ,它由多个ViewModel类inheritance。 在我的BaseViewModel我有一些从ViewModel注入的依赖项。 现在,如果我需要在BaseViewModel添加新的依赖项,我需要更改inheritanceBaseViewModel所有VM。 请告诉我如何在Simple Injector中处理它。 以下是我的代码结构: 如何使我的基类注入独立,以便我不需要在所有inheritance的类中进行更改? 码: public class BaseViewModel { protected readonly IAESEnDecrypt AESEnDecrypt; protected readonly IDataService DataService; protected readonly INavigationService NavigateToPage; public BaseViewModel(INavigationService nav, IDataService data, IAESEnDecrypt encrypt) { AESEnDecrypt= encrypt; NavigateToPage = nav; DataService = data; } } public class ViewModel { public ViewModel(INavigationService nav, IDataService data, IAESEnDecrypt encrypt) : […]

Castle Windsor不会在物业中注入Logger!

我尝试在我的服务类的ILogger属性中注入log4net但该属性始终为NULL! 我已经看过这个话题,但它对我没有帮助! 我如何让Castle Windsor自动注入房产? 这是Program.cs CastleContainer.Instance .Install( new RepositoriesInstaller(), new PersistenceInstaller(), new LoggerInstaller(), new FormInstaller(), new ServiceInstaller() ); FrmStart form1 = CastleContainer.Resolve(new {Id=”666″ }); 我使用log4net.config外部文件,这是我的安装程序: public class LoggerInstaller : IWindsorInstaller { #region IWindsorInstaller Members public void Install(IWindsorContainer container, IConfigurationStore store) { container.AddFacility(“logging”, new LoggingFacility(LoggerImplementation.Log4net, “log4net.config”)); } #endregion } 这个类包含我想要Windsor注入的属性: public partial class FrmStart : Form […]

如何在不引用程序集(或其中的类型)的情况下使用Ninject Conventions扩展

对于这个长期的问题,提前抱歉,这很长,因为我整天都在挖掘这个问题。 一般问题: 我有一个ASP.Net MVC2应用程序,其中包含以下项目:MyApp.Web,MyApp.Services,MyApp.Data。 我们对接口进行编码并将Ninject 2用于DI / IoC。 但是,我对打字(并忘记输入)感到非常厌倦: Bind.To; 所以,了解Ninject.Extensions.Convensions,我试图用它来自动扫描和注册模块和IXxxx => Xxxx类型的简单依赖项。 我试过的是有效的(但还不够): 我可以使用以下代码来设置Ninject,并且所有内容似乎都按预期连接。 public static IKernel Initialize() { var kernel = new StandardKernel(); kernel.Scan(a => { a.FromAssemblyContaining(); a.FromAssemblyContaining(); a.AutoLoadModules(); a.BindWithDefaultConventions(); a.InTransientScope(); }); return kernel; } 我想要完成的事情: 但是……我想以一种我认为支持的方式更进一步,但我似乎无法让它发挥作用。 由于我们的MyApp.Web项目根本没有使用MyApp.Data(直接),我试图避免引用MyApp.Data。 使用上面的代码,我必须从MyApp.Web引用MyApp.Data,因为对SomeDataClass的编译时引用。 我更愿意为Ninject指定一个程序集的名称进行扫描和注册。 看来,Conventions扩展通过From过载来支持这个,它带有一个字符串(或可枚举的字符串)。 我尝试了什么以及它如何打破: 所以,我在From重载上尝试了几种变体: public static IKernel Initialize() { var kernel = new StandardKernel(); […]

针对特定类类型的Autofac扫描assembly

我已经开始使用Autofac并希望扫描一些DLL并让Autofac注册其中的一些类。 我感兴趣的类都inheritance自PluginBase类,但下面的代码似乎没有注册它们。 有人可以帮忙吗? var assemblies = AppDomain.CurrentDomain.GetAssemblies(); var builder = new ContainerBuilder(); builder.RegisterAssemblyTypes(assemblies) .Where(t => t.BaseType == typeof(PluginBase)) .AsImplementedInterfaces() .AsSelf(); var container = builder.Build(); var pluginClasses = container.Resolve<IEnumerable>(); //pluginClasses is empty!!!!

MVC 4 Web Api控制器没有默认构造函数?

这是跟踪: An error has occurred. Type ‘ProjectName.Web.Api.Controllers.ContinentsController’ does not have a default constructor System.ArgumentException at System.Linq.Expressions.Expression.New(Type type) at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 我觉得这很奇怪,因为public class UsersController : ApiController { … }工作得很好。 我比较了2个控制器,所有设置和结构都相似。 我正在使用Ninject ,我的系统设置类似于Jamie Kurtz Asp.Net Mvc 4和Web Api:从头到尾构建REST服务 。 从堆栈跟踪,是否有人能够发现问题以及如何解决它? 谢谢! 按照要求。 ContinentsController […]

IoC在类库中。 在哪里引导

我正在使用可以被其他组件重用的类库。 在这个类库中,我使用unity来进行dependency injection。 对于这个类库,我创建了一个测试项目。 调用者也获得了一个测试项目。 我不确定的一件事是绑定的位置。 我应该将其合并到类库中,还是应该从调用应用程序中执行此操作?

IOC容器的最佳实践

我正在使用Unity IOC容器,我只是想知道访问多个类的容器的最佳方法是什么。 是否每个类都有一个IUnityContainer成员,然后通过构造函数传递容器? 是否应该有一个带有IOC容器的单例类? asp.net开发怎么样? 有人可以指导我朝正确的方向发展吗? 谢谢。

DI的一个接口的多个实现

现在我正在尝试使用Autofac的IOC容器自学习dependency injection模式。 我想出了一个非常简单的例子,如下所示。 虽然示例很简单,但我无法正常工作。 这是我的类/接口: 两个怪物,都实现了IMonster接口: interface IMonster { void IntroduceYourself(); } class Vampire : IMonster { public delegate Vampire Factory(int age); int mAge; public Vampire(int age) { mAge = age; } public void IntroduceYourself() { Console.WriteLine(“Hi, I’m a ” + mAge + ” years old vampire!”); } } class Zombie : IMonster { public […]

当控制器类在不同的程序集中时,如何将Controller注册到ASP.NET MVC中?

我的目标是修改asp.net mvc的控制器注册表,以便我可以在单独的(子)程序集中创建控制器和视图,只需将View文件和DLL复制到主机MVC应用程序,新控制器就可以“插入” “到主机应用程序。 显然,我需要某种IoC模式,但我不知所措。 我的想法是引用一个带有system.web.mvc的子程序集,然后开始构建从Controllerinheritance的控制器类: 单独组装: using System.Web; using System.Web.Mvc; namespace ChildApp { public class ChildController : Controller { ActionResult Index() { return View(); } } } 耶和华都很好。 但后来我考虑修改主机应用程序的Controller注册表以在运行时加载我的新子控制器,我感到困惑。 也许是因为我需要更深入地了解C#。 无论如何,我以为我需要创建一个CustomControllerFactory类。 所以我开始编写一个覆盖GetControllerInstance()方法的类。 在我打字时,intellisence突然出现: 主机MVC应用程序: public class CustomControllerFactory : DefaultControllerFactory { protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) { return base.GetControllerInstance(requestContext, controllerType); } } 现在,在这一点上,我很茫然。 我不知道那是做什么的。 […]