Tag: inversion of control

例外情况是:InvalidOperationException – 当前类型,是一个接口,无法构造。 你错过了类型映射吗?

在我的引导程序中: namespace Conduit.Mam.ClientServices.Common.Initizliaer { public static class Initializer { private static bool isInitialize; private static readonly object LockObj = new object(); private static IUnityContainer defaultContainer = new UnityContainer(); static Initializer() { Initialize(); } public static void Initialize() { if (isInitialize) return; lock (LockObj) { IUnityContainer container = defaultContainer; //registering Unity for MVC DependencyResolver.SetResolver(new UnityDependencyResolver(container)); //registering […]

Castle Windsor – 开放通用接口的IoC注册?

Castle Windsor是否允许注册开放的通用接口,还是需要单独注册每个可能的类型实例? 示例 – 下面的类型为T,Z在编译时失败,除非我单独指定强类型的T,Z。 container.Register(Component .For<IAdapterFactory>() .ImplementedBy<AdapterFactory>() .LifeStyle.PerWebRequest);

MVC3 + Ninject – 怎么样?

我刚开始玩IoC容器,因此选择了Ninject。 经过几个小时的汗水和眼泪,我仍然无法弄清楚如何使用Ninject设置我的MVC3应用程序。 到目前为止我有: 的Global.asax.cs public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); routes.MapRoute( “Default”, // Route name “{controller}/{action}/{id}”, // URL with parameters new { controller = “Home”, action = “Index”, id = UrlParameter.Optional } // Parameter defaults ); } protected void […]

如何在AutoFac中使用Property Injection?

在Console应用程序中,我正在使用Log4Net,在Main方法中我得到了logger对象。 现在,我想通过让所有类inheritance自具有ILog属性并且应该由Property Injection而不是Constructor Injection设置的BaseClass来使所有类中的日志对象可用。 我正在使用AutoFac IoC容器,如何将我的日志对象注入我的每个类的Log属性? 实现这一目标的最佳/最简单方法是什么? 有没有办法自动解决类型? 以下是我的测试应用程序: namespace ConsoleApplication1 { class Program { static ILog Log; static IContainer Container; static void Main(string[] args) { InitializeLogger(); InitializeAutoFac(); // the below works but could it be done automatically (without specifying the name of each class)? Product.Log = Container.Resolve(); // tried below but didn’t inject ILog […]

在Windows窗体中使用带有工作单元和存储库模式的简单注入器

我正在尝试在我的Windows窗体应用程序中实现IoC。 我的选择落在Simple Injector上,因为它快速而轻巧。 我还在我的应用程序中实现了工作单元和存储库模式。 这是结构: DbContext : public class MemberContext : DbContext { public MemberContext() : base(“Name=MemberContext”) { } public DbSet Members { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Conventions.Remove();\ } } 型号 : public class Member { public int MemberID { get; set; } public string Name { get; set; […]

Asp.Net MVC3:在ValidationContext中设置自定义IServiceProvider,以便validation器可以解析服务

2012年12月18日更新 由于这个问题似乎得到了不少观点,我应该指出,接受的答案不是我使用的解决方案,但它确实提供了构建解决方案的链接和资源,但是,在我看来,不是理想的解决方案。 我的回答包含 MVC框架标准部分的 替换 ; 并且你应该只使用那些,如果你觉得它们仍然适用于未来的版本(一些私有代码被从官方资源中删除,因为基类中没有足够的可扩展性)。 但是,我可以确认这两个类也适用于Asp.Net MVC 4以及3。 我也可以重复Asp.Net Web API框架的类似实现,这是我最近所做的。 结束更新 我有一个类型,有很多“标准”validation(必需等),但也有一些自定义validation。 一些此validation需要抓住服务对象并使用其他属性之一作为关键字查找某些较低级别(即“模型层”下方)元数据。 然后,元数据控制是否需要一个或多个属性以及这些属性的有效格式。 更具体一点 – 类型是卡片支付对象,简化为两个有问题的属性,如下所示: public class CardDetails { public string CardTypeID { get; set; } public string CardNumber { get; set; } } 然后我有一个服务: public interface ICardTypeService { ICardType GetCardType(string cardTypeID); } 然后ICardType包含不同的信息位 – 这里的两个信息至关重要: public interface ICardType { […]

使用IoC容器; 特别是温莎

我认为这个问题的答案非常明显,以至于没有人为此写过不好的文章,但是它已经很晚了,我真的无法理解这个问题。 我一直在阅读IoC容器(在这种情况下是Windsor),我很想念你如何从代码的各个部分与容器对话。 我得到DI,我一直在做穷人的DI(空构造函数调用带有默认参数实现的重载注入构造函数)一段时间,我可以完全看到容器的好处。 但是,我错过了一条至关重要的信息; 每次需要服务时,你应该如何引用容器? 我是否创造了一个我传递的单一全球性内容? 当然不是! 我知道我应该这样称呼: WindsorContainer container = new WindsorContainer(new XmlInterpreter()); (例如)当我想加载我的XML配置时,但是我该如何处理容器? 每次创建一个新容器之后是否通过一些内部静态majicks或其他方式持久保存加载的配置,或者每次都必须重新加载配置(我猜不是,或者生命周期无法工作)。 不理解这会阻止我弄清楚生命周期是如何工作的,并继续使用一些IoC的function 谢谢, 安德鲁

dependency injection – 几个类方法中需要的新实例

我有一些看起来像这样的代码: public MyService(IDependency dependency) { _dependency = dependency; } public Message Method1() { _dependency.DoSomething(); } public Message Method2() { _dependency.DoSomething(); } public Message Method2() { _dependency.DoSomething(); } 现在我刚刚意识到,因为依赖对象包含内部状态信息。 我需要在每个方法调用中新建一个新实例 那么,最好的方法是什么,仍然没有新的具体实例? 您是否会使用IoC容器并在每个方法中调用容器? 或者是否有一种更流畅的方式,您只能拨打一个容器? 如果我没有使用IoC容器怎么办?是否有办法不在每个方法中新建一个具体的实例?

dependency injection统一 – 条件解析

有条件的解决是我目前还不了解的最后一件事。 让我们说我们有一个接口IAuthenticate : public interface IAuthenticate{ bool Login(string user, string pass); } 现在我有两种类型的身份validation。 Twitter认证 public class TwitterAuth : IAuthenticate { bool Login(string user, string pass) { //connect to twitter api } } Facebook Auth public class FacebookAuth: IAuthenticate { bool Login(string user, string pass) { //connect to fb api } } 在unity配置中注册类型: unityContainer.RegisterType(); unityContainer.RegisterType(); 在我们的控制器中通过DI注入对象: […]

使用DI和IoC的工厂方法

我熟悉这些模式,但仍然不知道如何处理以下情况: public class CarFactory { public CarFactory(Dep1,Dep2,Dep3,Dep4,Dep5,Dep6) { } public ICar CreateCar(type) { switch(type) { case A: return new Car1(Dep1,Dep2,Dep3); break; case B: return new Car2(Dep4,Dep5,Dep6); break; } } } 通常,问题在于需要注入的引用量。 当有更多的汽车时会更糟。 我想到的第一种方法是在工厂构造函数中注入Car1和Car2,但它违反工厂方法,因为工厂将始终返回相同的对象。 第二种方法是注入servicelocator但它的反模式到处都是。 怎么解决? 编辑: 替代方式1: public class CarFactory { public CarFactory(IContainer container) { _container = container; } public ICar CreateCar(type) { switch(type) { […]