标签: structuremap

StructureMap - 覆盖命名实例的构造函数参数

您是否可以覆盖命名实例的构造函数参数,似乎您只能为默认实例执行此操作.

我想要做:

ObjectFactory.With("name").EqualTo("Matt").GetNamedInstance<IActivity>("soccer"); 
Run Code Online (Sandbox Code Playgroud)

structuremap inversion-of-control

5
推荐指数
1
解决办法
1597
查看次数

使用NHibernate 2.1和StructureMap进行构造函数依赖注入

我已经读过NHibernate 2.1支持构造函数依赖注入的地方.

如何配置StructureMap和NHibnerate 2.1以使其正常运行?

structuremap nhibernate

5
推荐指数
1
解决办法
1396
查看次数

如何在NServicebus消息处理程序中注入多个存储库?

我使用以下内容:

public interface IRepository<T>
{
   void Add(T entity);
}

public class Repository<T>
{
  private readonly ISession session;

  public Repository(ISession session)
  {
    this.session = session;
  }

  public void Add(T entity)
  {
     session.Save(entity);
  }
}

public class SomeHandler : IHandleMessages<SomeMessage>
{
  private readonly IRepository<EntityA> aRepository;
  private readonly IRepository<EntityB> bRepository;

  public SomeHandler(IRepository<EntityA> aRepository, IRepository<EntityB> bRepository)
  {
    this.aRepository = aRepository;
    this.bRepository = bRepository; 
  }

  public void Handle(SomeMessage message)
  {
   aRepository.Add(new A(message.Property);
   bRepository.Add(new B(message.Property);
  }
}

public class MessageEndPoint : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
   public …
Run Code Online (Sandbox Code Playgroud)

structuremap nhibernate nservicebus

5
推荐指数
1
解决办法
996
查看次数

StructureMap-将依赖项注入基类吗?

在我的领域中,我有一些“处理器”类,它们包含大部分业务逻辑。使用带有默认约定的StructureMap,我将存储库注入这些类的各种IO(数据库,文件系统等)中。例如:

public interface IHelloWorldProcessor
{
    string HelloWorld();
}
public class HelloWorldProcessor : IHelloWorldProcessor
{
    private IDBRepository _dbRepository;
    public HelloWorldProcessor(IDBRepository dbRepository)
    {
        _dbRepository = dbrepository;
    }
    public string HelloWorld(){ return _dbRepository.GetHelloWorld(); }
}
Run Code Online (Sandbox Code Playgroud)

现在,有一些存储库可供所有处理器使用,因此我做了一个基类,如下所示:

public class BaseProcessor
{
    protected ICommonRepository _commonRepository;
    public BaseProcessor(ICommonRepository commonRepository)
    {
        _commonRepository = commonRepository;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我的其他处理器继承自该处理器时,每个处理器都会收到一个编译器错误,说没有BaseProcessor的构造函数,该构造函数采用零参数。

有没有办法做我想在这里做的事情?就是说,是否要将公共依赖项注入到我的其他类可以使用的基类中,而不必将注入内容写入每个基类中?

structuremap inheritance constructor

5
推荐指数
1
解决办法
1861
查看次数

StructureMap:在基类中注入原始属性

与此问题相关,但这个问题与StructureMap有关.

我有以下接口定义:

public interface ICommandHandler
{
    ILogger Logger { get; set; }
    bool SendAsync { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有多个实现,ICommandHandler需要解决.我想在实现的实例中自动注入这两个属性ICommandHandler.

我找到了一种方法来执行注入ILogger,让所有实现都从基类型和[SetterProperty]属性继承:

public abstract class BaseCommandHandler : ICommandHandler
{
    [SetterProperty]
    public ILogger Logger { get; set; }

    public bool SendAsync { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然而,这并没有帮助我bool在所有实现中注入基本类型.

命令处理程序实现从基接口继承的通用接口:

public interface ICommandHandler<TCommand> : ICommandHandler
    where TCommand : Command
{
     void Handle(TCommand command);
}
Run Code Online (Sandbox Code Playgroud)

这是我目前的配置:

var container = new Container();

container.Configure(r => …
Run Code Online (Sandbox Code Playgroud)

.net c# structuremap dependency-injection ioc-container

5
推荐指数
1
解决办法
1475
查看次数

使用NUnit的Specflow不尊重TestFixtureSetUpAttribute

我正在使用SpecFlow和Nunit,我正在尝试使用TestFixtureSetUpAttribute设置我的环境测试,但它从未被调用过.

我已经尝试过使用MSTests和ClassInitialize属性,但同样的事情发生了.该函数未被调用.

任何想法为什么?

[Binding]
public class UsersCRUDSteps
{
    [NUnit.Framework.TestFixtureSetUpAttribute()]
    public virtual void TestInitialize()
    {
        // THIS FUNCTION IS NEVER CALLER

        ObjectFactory.Initialize(x =>
        {
            x.For<IDateTimeService>().Use<DateTimeService>();
        });

        throw new Exception("BBB");
    }

    private string username, password;

    [Given(@"I have entered username ""(.*)"" and password ""(.*)""")]
    public void GivenIHaveEnteredUsernameAndPassword(string username, string password)
    {
        this.username = username;
        this.password = password;
    }

    [When(@"I press register")]
    public void WhenIPressRegister()
    {
    }

    [Then(@"the result should be default account created")]
    public void ThenTheResultShouldBeDefaultAccountCreated()
    {
    }
Run Code Online (Sandbox Code Playgroud)

解:

[Binding]
public class UsersCRUDSteps …
Run Code Online (Sandbox Code Playgroud)

structuremap nunit specflow

5
推荐指数
1
解决办法
3515
查看次数

使用Structuremap从多个程序集中依赖注入

我是DI概念的新手,也是结构图的新手.我正在尝试完全填充我的所有接口都在其中AssemblyA并且我的所有实现都在的场景AssemblyB.我想使用Structuremap AssemblyB在依赖于接口的构造函数中注入类的实例AssemblyA

public class Customer(ICustomerService)
{

}
Run Code Online (Sandbox Code Playgroud)

ICustomerServiceAssemblyACustomerService班级在assemblyB.我希望Structuremap CustomerService在此构造函数中注入实例.我假设如果类的名称与前缀为和的接口名称相同I.Structuremap将自动识别它.

我写了以下配置.

 x =>
        {


            x.Scan(scan =>
                {
                    scan.Assembly("AssemblyA");
                    scan.Assembly("AssemblyB");
                    scan.TheCallingAssembly();
                    scan.WithDefaultConventions();
            });
Run Code Online (Sandbox Code Playgroud)

但它给了我错误

StructureMap Exception Code:  202
No Default Instance defined for PluginFamily AssemblyA.ICustomerService, AssemblyA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Run Code Online (Sandbox Code Playgroud)

我想使用默认约定,并避免将每个接口注册到类.

structuremap dependencies dependency-injection

5
推荐指数
1
解决办法
1629
查看次数

如何在Container实例上释放和处置所有Http范围的对象?

在StructureMap中,如何在特定的Container实例上释放和处理Http范围的对象?对于Object Factory中的默认intance,我可以执行该方法ReleaseAndDisposeAllHttpScopedObjects(),但Container类和IContainer接口似乎没有这样的方法.

c# structuremap httpcontext

5
推荐指数
1
解决办法
1627
查看次数

5
推荐指数
2
解决办法
3698
查看次数

没有注册默认实例,无法自动确定类型

我的界面定义如下:

public interface IApplicationSettings
{
   string LoggerName { get; }
   string NumberOfResultsPerPage { get; }
   string EmailAddress { get; }
   string Credential { get; }
}
Run Code Online (Sandbox Code Playgroud)

该接口的实现如下:

public class WebConfigApplicationSettings : IApplicationSettings
    {
        public string LoggerName
        {
            get { return ConfigurationManager.AppSettings["LoggerName"]; }
        }

        public string NumberOfResultsPerPage
        {
            get { return ConfigurationManager.AppSettings["NumberOfResultsPerPage"]; }
        }

        public string EmailAddress
        {
            get { return ConfigurationManager.AppSettings["EmailAddress"]; }
        }

        public string Credential
        {
            get { return ConfigurationManager.AppSettings["Credential"]; }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我还创建了一个工厂类来获取WebConfigSettings具体实现的实例,如下所示:

public class ApplicationSettingsFactory
    {
        private …
Run Code Online (Sandbox Code Playgroud)

structuremap asp.net-mvc ioc-container

5
推荐指数
2
解决办法
2万
查看次数