Инициализация StructureMap с классом, который имеет конструктор с параметрами - PullRequest
2 голосов
/ 14 апреля 2011

Я пытаюсь инициализировать StructureMap, чтобы внедрить конкретный класс, который имеет только один конструктор, который принимает 4 строковых параметра.

Обычно для классов с конструктором без параметров я бы просто сделал это:

For<IMyClass>().Use<MyClass>();

Но как бы я это сделал, если бы у MyClass был один конструктор?

public class MyClass : IMyClass
{
    public MyClass(string name, string etc)
    {

    }
}

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Если значения, которые вы хотите передать, известны во время регистрации, вы можете указать следующее:

For<IMyClass>().Use<MyClass>()
  .Ctor<string>("name").Is("theName")
  .Ctor<string>("etc").Is("etcetera");
1 голос
/ 14 апреля 2011

Это сработало для меня

public interface IMyClass
{
    string MyMethod();
}

public class MyClass : IMyClass
{
    private readonly string myName;
    private readonly string myEtc;

    public MyClass(string name, string etc)
    {
        myName = name;
        myEtc = etc;
    }

   public string MyMethod()
   {
       return myName + myEtc;
   }
}

public class FactoryTest
{
    public string GetMyString()
    {
        RegisterMyClass();
        return ObjectFactory.GetInstance<IMyClass>().MyMethod();
    }

    public void RegisterMyClass()
    {
        ObjectFactory.Initialize(
              f => f.For<IMyClass>().Use(x => new MyClass("a", "b")));
    }
}
...