标签: structuremap

使用WCF的StructureMap?

任何人都有幸将StructureMap(DI Framework)与WCF集成在一起?

我可以像这样在我的WCF服务的构造函数中返回默认实例,但显然它并不理想.

public MemberService()
{
     this.memberRepository = StructureMap.ObjectFactory.GetInstance<IMemberRepository>();
}
Run Code Online (Sandbox Code Playgroud)

我见过这个(http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/07/29/integrating-structuremap-with-wcf.aspx)但由于我认为它与最新的2.5+不兼容,所以没有运气设置发布StructureMap.

structuremap wcf dependency-injection

3
推荐指数
1
解决办法
3591
查看次数

StructureMap,扫描组件和范围

如何在扫描程序集时添加一些作用域?谷歌似乎对"结构图扫描缓存"感到满意:/ /

ObjectFactory.Configure(registry =>
{
    registry.Scan(x =>
    {
        x.AssemblyContainingType(typeof(IRepository<>));
        x.With<DefaultConventionScanner>();
    });
}
Run Code Online (Sandbox Code Playgroud)

.net c# structuremap

3
推荐指数
1
解决办法
1353
查看次数

使用Ninject(或其他一些容器)如何找出请求服务的类型?

假设我有一个服务接口:

public interface IFooService
{
   void DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

并且该服务的具体实现是通用的:

public class FooService<TRequestingClass> : IFooService
{
   public virtual void DoSomething() { }
}
Run Code Online (Sandbox Code Playgroud)

我还有一些需要IFooService实例的其他类:

public class Bar
{
   private IFooService _fooService;
   public Bar(IFooService fooService)
   {
      this._fooService = fooService;
   }
}
Run Code Online (Sandbox Code Playgroud)

我需要连接我的IoC容器,这样当创建Bar时,它会传递一个FooService <Bar>的构造函数参数.还有很多其他课程就像Bar一样.每个人都可能需要传递给他们的FooService <TRequestingClass>实例,其中TRequestingClass是需要IFooService实例的类的类型.我不需要向IFooService的消费者公开这个怪癖.他们应该关心的是他们可以调用他们传递的IFooService的方法.他们不应该知道他们传递的IFooService的具体实现需要任何特殊的构造.

FooService <T>的可接受的替代方法是一个非泛型类,在其构造函数中包含一个字符串参数,该参数包含为其创建的类的名称.即:

public class FooService : IFooService
{
   public FooService(string requestingClassName) { }
}
Run Code Online (Sandbox Code Playgroud)

如何通过这种方式连接我的IoC容器来构建依赖项?

如果你为什么我想要这样一个奇怪的结构而感到困惑,那么考虑当你得到一个用log4net.LogManager.GetLogger(typeof(SomeClass))创建的ILog时log4net如何工作得最好.我不想通过引用log4net来丢弃我的代码,所以我想编写一个简单的ILogger接口,并用这样的方式实现它:

public class GenericLogger<T> : ILogger
{
    private readonly ILog log;

    public GenericLogger()
    {
        this.log = log4net.LogManager.GetLogger(typeof(T));
    }

    public void Debug(object message)
    { …
Run Code Online (Sandbox Code Playgroud)

.net c# structuremap ninject inversion-of-control

3
推荐指数
1
解决办法
3569
查看次数

使用基于StructureMap约定的注册设置实例生命周期

我正在尝试使用StructureMap 2.6.1使用基于约定的注册立即注册我的所有存储库.请参阅下面的代码:

x.Scan(s =>
{
    s.TheCallingAssembly();
    s.IncludeNamespaceContainingType<RepositoryRegistration>();
    s.SingleImplementationsOfInterface();
}
Run Code Online (Sandbox Code Playgroud)

它工作但现在我正在尝试为所有已注册的类型添加生命周期(HybridHttpOrThreadLocalScope).是否可以不从头开始重写SingleImplementationsOfInterface约定,如果是,如何?

谢谢.

structuremap convention-over-configur

3
推荐指数
1
解决办法
431
查看次数

WCF在多个客户端之间共享IClientMessageInspector实例

我在通过此处的方法" 集中式cookie管理 "中概述的方法进行WCF服务调用时管理共享的auth cookie :http://megakemp.com/2009/02/06/managing-shared-cookies-in- WCF /

我已经建立了一个自定义的IClientMessageInspector,IEndpointBehavior,BehaviorExtensionElement,的作品.我的端点行为添加了一个消息检查器,如下所示:

public class MyEndpointBehavior : IEndpointBehavior
{
    public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
    {
    }
    public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
    {
        // yuck.. Wish I had an instance of MyClientMessageInspector
        // (which has the auth cookie already) so I could just inject that
        // instance here instead of creating a new instance
        clientRuntime.MessageInspectors.Add(new MyClientMessageInspector());
    }
    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
    {
    } …
Run Code Online (Sandbox Code Playgroud)

structuremap wcf dependency-injection wcf-client endpointbehavior

3
推荐指数
1
解决办法
3053
查看次数

无法使用StructureMap从私有或内部构造函数调用BuildUp

在我的一个类中,我有一个用于单元测试的内部构造函数,以及一个我的应用程序调用的私有构造函数.内部具有我的依赖项的参数,而私有构造函数没有参数,并调用BuildUp使用setter注入.因为代码崩溃了我,并出现以下错误:

StructureMap Exception Code:  245
Error while trying to create an InstanceBuilder for My.Namespace.And.Class, My.Assembly, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null
at StructureMap.Graph.PluginCache.<.cctor>b__1(Type t) in c:\code\structuremap\Source\StructureMap\Graph\PluginCache.cs:line 40
at StructureMap.Util.Cache`2.get_Item(KEY key) in c:\code\structuremap\Source\StructureMap\Util\Cache.cs:line 82
at StructureMap.Graph.PluginCache.FindBuilder(Type pluggedType) in c:\code\structuremap\Source\StructureMap\Graph\PluginCache.cs:line 52
at StructureMap.Container.BuildUp(Object target) in c:\code\structuremap\Source\StructureMap\Container.cs:line 243
at StructureMap.ObjectFactory.BuildUp(Object target) in c:\code\structuremap\Source\StructureMap\ObjectFactory.cs:line 297

Object reference not set to an instance of an object.
at StructureMap.Construction.ConstructorFunctionBuilder`1.CreateBuilder(Plugin plugin) in c:\code\structuremap\Source\StructureMap\Construction\ConstructorFunctionBuilder.cs:line 25
at StructureMap.Construction.BuilderCompiler.FuncCompiler`1.CreateBuilder(Plugin plugin) in c:\code\structuremap\Source\StructureMap\Construction\BuilderCompiler.cs:line 51
at StructureMap.Construction.BuilderCompiler.CreateBuilder(Plugin plugin) in c:\code\structuremap\Source\StructureMap\Construction\BuilderCompiler.cs:line 12
at StructureMap.Graph.PluginCache.<.cctor>b__1(Type …
Run Code Online (Sandbox Code Playgroud)

c# structuremap dependency-injection

3
推荐指数
1
解决办法
2262
查看次数

在ObjectFactory中注册命名实例

我尝试在结构图中注册命名实例.但我的试验并不成功.

什么是正确的方法?

目前我这样做:

IService bus = CreateInstanceOfServiceBus();
ObjectFactory.Configure(cfg => cfg.For<IServiceBus>()
                                  .AddInstances(x =>x.IsThis(bus)
                                  .Named("foobar"))
                                  .Singleton());
Run Code Online (Sandbox Code Playgroud)

但是当我尝试获取命名实例时,没有找到任何内容:

ObjectFactory.TryGetInstance<IServiceBus>("foobar");
Run Code Online (Sandbox Code Playgroud)

提前致谢.最好的祝福.

约阿希姆

structuremap

3
推荐指数
1
解决办法
1232
查看次数

没有构造函数的依赖注入:真的是一个不好的做法?

我正在使用C#,MVC4,StructureMap等进行Web解决方案.

在解决方案中,我有控制器服务.举例:

public class ServiceA{
    private readonly IRepository _repository1;
    private readonly IRepository _repository2;

    public ServiceA(IRepository1 repository1, IRepository2 repository2){
        _repository1=repository1;
        _repository2=repository2;
    }

    public void DoSomethingA(){
        _repository1.DoSomething();
    }

    public void DoSomethingB(){
        _repository2.DoSomething();
    }
}

public class ServiceB{
    private readonly IRepository _repository3;
    private readonly IRepository _repository4;

    public ServiceB(IRepository3 repository3, IRepository4 repository4){
        _repository3=repository3;
        _repository4=repository4;
    }

    public void DoSomethingA(){
        _repository3.DoSomething();
    }

    public void DoSomethingB(){
        _repository4.DoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做是好的做法吗?:

public abstract class ServiceBase(){
    public IRepository1 Repository1 { get { return instanceOf<IRepository1>(); }}
    public IRepository2 Repository2 { …
Run Code Online (Sandbox Code Playgroud)

c# structuremap asp.net-mvc dependency-injection recommendation-engine

3
推荐指数
1
解决办法
1729
查看次数

在IIS上部署后出现Structuremap 207错误

我们正在使用ASP.Net MVC 3.0框架开发一个应用程序.我们使用structuremap在运行时注入对象.为此我们正在使用构造函数注入.我们已经编写了自定义控制器工厂,通过该工厂将控制器的创建委托给该工厂return (Controller)ObjectFactory.GetInstance(controllerType);.通过将接口映射到具体类来定义使用DSL的定义.

当应用程序在visual studio开发服务器上运行时,一切正常.但是当在IIS 7.0上部署相同的应用程序时,在运行时创建对象时会抛出207错误.

任何人都可以帮助我们是否需要更新IIS上的任何设置或帮助调试此问题的步骤?请找到问题的下面的堆栈跟踪

ExceptionStructureMap Exception Code:  
207 Internal exception while creating Instance '83248ea8-b195-4166-8a7d-678e9a677c9f' of PluginType Payrs.Web.Controllers.PaymentRequestController.  
Check the inner exception for more details.Stack Trace :   
 at StructureMap.Pipeline.ConstructorInstance.Build(Type pluginType, BuildSession session, IInstanceBuilder builder)  
    at StructureMap.Pipeline.ConstructorInstance.build(Type pluginType, BuildSession session)    
     at StructureMap.Pipeline.Instance.createRawObject(Type pluginType, BuildSession session)    
      at StructureMap.Pipeline.Instance.Build(Type pluginType, BuildSession session)    
       at StructureMap.Pipeline.ObjectBuilder.Resolve(Type pluginType, Instance instance, BuildSession session)   
         at StructureMap.BuildSession.CreateInstance(Type pluginType, Instance instance)    
          at StructureMap.BuildSession.<>c__DisplayClass3.<.ctor>b__1()    
           at StructureMap.BuildSession.CreateInstance(Type pluginType)    
            at Payrs.Web.Infrastructure.PayrsControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)  


             **Inner Exception**    

              at Payrs.Web.Controllers.PaymentRequestController..ctor(IPaymentService …
Run Code Online (Sandbox Code Playgroud)

structuremap asp.net-mvc-3

3
推荐指数
1
解决办法
5744
查看次数

如何使用StructureMap摆脱代码中的ObjectFactory

在使用最新的StructureMap版本(3.1.6.191)升级我们的解决方案后,我收到了很多过时的警告.这些警告来自StructureMap,ObjectFactory在将来的版本中将弃用该类(4.0+).

我正在使用WCF,我们希望使用以下的实现让StructureMap挂钩在WCF管道中IInstanceProvider:

public class StructureMapInstanceProvider : IInstanceProvider
Run Code Online (Sandbox Code Playgroud)

这个类用来ObjectFactory获取一个实例,当我的容器中没有静态类来解决它时,我们怎么能得到一个类型的实例呢?

c# structuremap wcf dependency-injection

3
推荐指数
1
解决办法
4189
查看次数