Tag: 结构图

如何使用StructureMap v2.6解析signalR v2.0

在Global.asax的Application_Start中,我有以下内容 ObjectFactory.Initialize(cfg => { cfg.For().Singleton().Add (); }); 我的Hub接口是 public interface IDashboardHub { void Initialize(); } 我的中心如下: public class DashboardHub : Hub, IDashboardHub { private readonly ICpeAccountService _accountService; public DashboardHub(ICpeAccountService service) { _accountService = service; } [Authorize] public void Initialize() { Clients.All.UpdateStatus(“Hello World!!!”); } } 如果我删除注入的构造函数和解析器,那么我得到“Hello World”信号,JavaScript显示值。 如果我只是删除解析器,那么signalR不再找到无参数构造函数,并且不会调用Initialize方法。 如果我包含StructureMap依赖项解析器(它正在工作并立即注入大约40个其他类),那么我得到以下exception消息 StructureMap configuration failures: Error: 104 Source: Registry: […]

结构图和generics类型

我的情况与我见过的其他情况有点不同。 为了澄清,这不是正常的问题,例如; 类似于IAClass映射到AClass等 – 这涉及到每个接口基本上使用一个具体的类。 这涉及到一个通用类,但我希望能够加载它的所有可能用法。 例如 – 主要类是 public class MyClass : IMyClass where TDomainObject : DomainObject 这样的例子用法就是 IMyClass p = new MyClass; IMyClass p = new MyClass; 即对于所有DomainObjects,我希望能够加载MyClass 。 所以你可以看到我没有为每个声明使用特定的类,它们都使用相同的类。 我如何将其加载到StructureMap中?

属性注入动作filter

我正在尝试使用Property Injection处理自定义操作filter属性。 它应该工作,但是,我想在属性本身使用DI。 我的filter看起来像这样 [AttributeUsage(AttributeTargets.Class)] public sealed class HeaderFilterAttribute : ActionFilterAttribute { public IMarketService MarketService { get; set; } public override void OnActionExecuted(ActionExecutedContext filterContext) { var view = (ViewResultBase)filterContext.Result; if (view != null) { BaseViewModel viewModel = view.ViewData.Model as BaseViewModel; if (viewModel != null) viewModel.Header = GetHeaderScript(); } base.OnActionExecuted(filterContext); } private string GetHeaderScript() { //Use […]

Singleton中的结构图返回多个实例

我使用命名实例为同一个接口注册了5个派生类。 所有这些类都注册为Singleton For().Singleton().Use().Named(“Derived1”); For().Singleton().Use().Named(“Derived2”); For().Singleton().Use().Named(“Derived3”); 有一个静态类根据输入解析实例。 但是我观察到每次调用ObjectFactory.GetInstance都会在每个请求上返回新实例而不是Singleton。 应用程序中也没有线程。 知道为什么会这样吗? 编辑: 静态解决方案助手会导致任何问题吗? 这是我解析实例的方式。 Singleton在示例应用程序中正常工作,但它在我的机器上不起作用。 要添加更多细节 – 该项目是MVC Web API,我正在本地IIS上进行测试。 我很肯定在应用程序中没有用户创建的线程。 public static class Resolver { public static IBaseInterface GetHelper(string inputParam) { if inputParam is “Case1” return ObjectFactory.GetInstance(“Derived1”) //Similarly for other instances } }

StructureMap中的命名实例和默认实例?

在我的StructureMap引导代码中,我使用自定义约定来扫描程序集,并将接口/实现对作为命名实例添加到对象图中。 基本上我有一些逻辑可以检查配置设置,并根据不同的条件深入到这个语句: registry.For(interfaceType).Use(type) .Named(implementationName); 这样可以很好地添加所有命名实例。 但是,我还想在未指定实例名称的情况下添加默认实例。 但是,默认实例并不总是添加到图表中的最后一个实例。 有时在扫描期间会添加其他命名实例。 但是,似乎最后添加的任何一个实例,无论它是否被命名,都始终是默认的。 我尝试了各种流畅的API组合,包括: registry.For(interfaceType).Add(type); 要么: registry.For(interfaceType).Use(type); 甚至一些被标记为弃用的。 但最终的行为始终是最后一个是默认行为。 因此,如果添加实现的顺序是这样的: 对于Logger接口,使用名为“Log4Net”的Log4Net实现 对于Logger接口,默认使用Log4Net实现 对于Logger接口,使用名为“Mock”的Mock实现 由此产生的行为是,当未指定名称时,“Mock”实现将用作默认值。 调试容器中的AllInstances ,我按以下顺序看到: 名为“Log4Net”的Log4Net记录器实例 Log4Net记录器的一个实例,带有名称的GUID(就像我可以告诉的那样,任何其他默认实例) Mock记录器的一个实例名为“Mock” 但是,从没有实例名称的容器调用时调试到日志记录语句会导致使用Mock实现。 有没有办法将默认实例添加到对象图中,同时仍然能够在之后添加命名实例?

使用(流利)NHibernate与StructureMap(或任何IoCC)

在我学习NHibernate的过程中,我已经达到了下一个障碍; 我该如何将它与StructureMap集成? 虽然代码示例非常受欢迎,但我对一般过程更感兴趣。 我打算做的是…… 使用Fluent NHibernate创建我的类映射以用于NHibs配置 实现ISession和ISessionFactory 将我的ISessionFactory实例作为单例引导到StructureMap中 使用StructureMap注册ISession,使用per-HttpRequest缓存 但是,我不需要在HttpRequest结束时在我的会话实例上调用各种整理方法(因为这就是生命的终点)? 如果我在Dispose()中进行整理,那么structuremap会为我处理这个问题吗? 如果没有,我该怎么办? 谢谢 安德鲁

如果组合根位于客户端上,如何在WCF中注入依赖项

在我开始之前,我必须说我咬的可能比我能咀嚼的多,但是我处于绝望的学习浪潮中,我需要很多帮助。 我正在编写一个练习,从两本书中取样: 1. Mark Seemann在.Net中的dependency injection 2. Brian Egan和Steve Valenzuela的专业ASP .Net设计模式 该练习使用WCF作为服务层并使用客户端应用程序中的合成根的dependency injection来实现请求/响应消息传递模式。 从2开始: 在练习中,对于服务层,我有五个类库: – 合同:与服务合同的接口。 – 数据协定:包含使用DataContractAttribute修饰的所有对象 – HttpHost:WCF服务的主机。 该库包含所有svc文件 – ServiceProxy:此库手动实现客户端要使用的服务代理 – 服务:包含服务的实现。 从1开始: 我想用控制台和ASP .Net MVC客户端测试这个练习,因此组合根是第一个的Main方法,第二个是Global.asax和自定义控制器工厂组合。 所以我的问题是: 如果在客户端上实现组合根,我是否必须为WCF中的ServiceHostFactory,ServiceHost和IInstanceProvider提供自定义实现? 难道这不会让我有两个组成根源吗? 如果(希望)我只需要客户端中的组合根,我在哪里创建具有依赖项的构造函数? 在服务的实现中,还是在服务的代理中,还是在两者中? 应该如何配置对象层次结构? 我想首先使用穷人的DI,并且一旦运行将Structure Map作为IoC容器。 非常感谢你的帮助。 这是我到目前为止的代码(我不包括服务合同或数据合同): 服务实施: namespace Exercise.Services { public class PurchaseOrderService : IPurchaseOrderService { private readonly IPurchaseOrderFacade PurchaseOrderFacade; public […]

用StructureMap注册通用工厂的方法

我试图在我的structuremap注册表中的generics工厂类上使用方法。 通常,我会在使用工厂方法注册类型时使用以下内容: For().Use(x => new FooFactory().GetFoo()); 注册generics类型时如下: For(typeof(ISomeGeneric)).Use(typeof(SomeGeneric)); 如何将两者结合起来并从通用工厂方法中检索generics类型? 我认为应该是这样的: For(typeof(IFoo)).Use(typeof(x => new FooFactory().Create(someParameter)); 这只是给了一个 “Cannot convert lambda expression to type object because it is not a delegate type” 错误。 我尝试了各种组合,但我很难过。 有任何想法吗? 谢谢。

IOC DImultithreading生命周期范围在后台任务中

我有一个使用IOC和DI来创建和注入服务的应用程序。 我有一个处理一些业务逻辑的服务层,在服务层我有一个与数据库通信的存储库。 该存储库使用的是非线程安全的DataContext。 我想使用后台任务异步运行服务上的一些函数,但是知道这会导致存储库出现问题。 因此,我希望为每个创建的后台线程创建存储库。 这是如何实现的? 我正在使用StructureMap作为IoC。 public class Service : IService { IRepository _repository; public Service(IRepository repository) { this._repository = repository; } public void DoSomething() { // Do Work _repository.Save(); } } public class Controller { IService _service; public Controller(IService service) { this._service = service; } public Action DoSomethingManyTimes() { for(int i =0; i […]

Structuremap是否支持Lazy开箱即用?

structuremap是否允许您以懒惰的方式进行构造函数注入? 意思是不创建在使用之前注入的对象?