Tag: 结构图

StructureMap singleton usage(一个实现两个接口的类)

public interface IInterface1 { } public interface IInterface2 { } public class MyClass : IInterface1, IInterface2 { } … ObjectFactory.Initialize(x => { x.For<IInterface1>().Singleton().Use<MyClass>(); x.For<IInterface2>().Singleton().Use<MyClass>(); }); var x = ObjectFactory.GetInstance<IInterface1>(); var y = ObjectFactory.GetInstance<IInterface2>(); 我用上面的代码得到了两个不同的MyClass实例。 我怎样才能得到一个?

使用StructureMap时传递构造函数参数

我正在为我的DI使用StructureMap。 想象一下,我有一个类需要1个参数,如: public class ProductProvider : IProductProvider { public ProductProvider(string connectionString) { …. } } 当我得到一个IProductProvider的实例时,我需要在运行时指定“connectionString”。 我已经configuration了StructureMap,如下所示: ForRequestedType<IProductProvider>.TheDefault.Is.OfConcreteType<ProductProvider>(). WithCtorArgument("connectionString"); 不过,我不想在这里调用EqualTo(“something …”)方法,因为我需要一些工具来在运行时dynamic指定这个值。 我的问题是:如何通过使用ObjectFactory获得IProductProvider的实例? 目前,我有这样的东西: ObjectFactory.GetInstance<IProductProvider>(); 但是,如你所知,这是行不通的… 任何build议将不胜感激。

MEF和IoC容器的区别(如Unity,Autofac,SMap,Ninject,Windsor.Spring.net等)

我一直在寻找dependency injection并阅读一些文章。 但是我仍然无法找出MEF与其他IoC之间的区别。 所以,我的问题是这样的:我应该在哪种情况下使用MEF或IoC容器? 为什么在(WPF&Silverlight)或桌面应用程序中使用MEF for PRISM? 而在Web应用程序中,人们使用IoC容器。 那么,决定使用哪种依赖技术的标准是什么呢? 我已经通过文章http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef.aspx ,但我无法确定任何东西。

告诉StructureMap使用特定的构造函数

我有两个需要XPathDocument服务。 我希望能够定义XPathDocumnet命名实例以用于两个服务的configuration。 我也希望能够告诉StuctureMap使用XPathDocument哪个构造函数。 当我尝试获取XPathDocument的实例时,它告诉我它无法findXmlReader的插件types。 我想使用需要一个stringuri的构造函数的XML文件。 我似乎无法得到这个工作。 这是StructureMapconfiguration代码。 public class Service1 : IService1 { public Service1(XPathDocument document) {} } public class Service2 : IService2 { public Service2(XPathDocument document) {} } public class Registry1 : Registry { ForRequestedType<IService1>().TheDefault.Is.OfConcreteType<Service1>() .CtorDependency<XPathDocument>() .Is(x => x.TheInstanceNamed("XPathDocument1")); ForRequestedType<IService2>().TheDefault.Is.OfConcreteType<Service2>() .CtorDependency<XPathDocument>() .Is(x => x.TheInstanceNamed("XPathDocument2")); ForRequestedType<XPathDocument>().AddInstances(x => { x.OfConcreteType<XPathDocument>() .WithCtorArg("uri").EqualToAppSetting("XmlFile1") .WithName("XPathDocument1"); x.OfConcreteType<XPathDocument>() .WithCtorArg("uri").EqualToAppSetting("XmlFile2") .WithName("XPathDocument2"); }); […]

如何使用具有“贪婪”构造函数的Scan来使用具有通用未closurestypes的StructureMap

在各种堆栈溢出问题和博客post之间,关于开放式generics和StructureMap的主题有相当多的文档。 不幸的是,我必须错过一些东西,因为我试图使用scan来执行configuration,而具有“贪婪”构造函数的类实现还没有工作。 我希望StructureMap通过引用其实现的接口来获取下一个类的实例。 ToCsvService存在于名为“基础结构”的未引用程序ToCsvService 。 IToCsvService存在于名为Core的引用程序IToCsvService 。 正如你可以看到ToCsvService有一个“贪婪的”构造函数。 public class ToCsvService<TSource> : IToCsvService<TSource> { public ToCsvService(ICollection<TSource> collection) { } } 我让StructureMap通过ConnectImplementationsToTypesClosing方法了解ToCsvService 。 ObjectFactory.Initialize(cfg => { cfg.Scan(scan => { scan.Assembly("Infrastructure"); scan.WithDefaultConventions(); // even with this call StructureMap cannot use ToCsvService // instance of IToCsvService (though wouldn't expect it to) scan.ConnectImplementationsToTypesClosing (typeof(IToCsvService<>)); }); }); 从ObjectFactory.WhatDoIHave()方法看来,StructureMap知道ToCsvService 。 PluginType名称说明 […]

比较Castle Windsor,Unity和StructureMap

在跟随Krzysztof的声明 , 温莎做了比其他IoC更多,我想了解这些IoC的相互堆叠和城堡温莎提供的好处/额外设施。 有比较吗? 有人可以帮助我了解Castle Windsor提供的其他IoCfunction吗?

使用StructureMap来实现Strategy模式的最佳方法

我的Web应用程序在业务逻辑和表示逻辑上有一些细微的变化,具体取决于login用户的types。通过根据用户types注入不同的具体类来获得变化似乎非常适合DI。 所以我想知道我应该使用什么样的StructureMap来实现这个function(或者如果我是基于DI的目的而离开的话)。 (我刚刚了解到configuration文件不是实现这一目标的方法,因为设置configuration文件不是每个线程操作: StructureMapconfiguration文件是否线程安全? ) 编辑 这是这样的吗? public class HomeController { private ISomeDependancy _someDependancy; public HomeController(ISomeDependancy someDependancy) { _someDependancy = someDependancy; } public string GetNameFromDependancy() { return _someDependancy.GetName(); } } public interface ISomeDependancy { string GetName(); } public class VersionASomeDependancy : ISomeDependancy { public string GetName() { return "My Name is Version A"; } } […]