Я пытаюсь использовать Structuremap, что доставляет мне немало хлопот, поскольку документация на сайте struct-map-site довольно старая (в большинстве случаев, когда я работаю с предоставленным кодом, я получаю устаревшее сообщение в VS...)
В любом случае, я пытаюсь представить что-то вроде этого:
private static ITest GetInstance()
{
return (new Container(x => x.For<ITest>().Use<Test2>())).GetInstance<ITest>();
}
Этот фрагмент кода работает нормально, НО теперь я пытаюсь достичь того же самого безКласс "Test2" в этом проекте.Моя цель: я хочу иметь папку со всеми видами .dll, которая предоставляет ITest-методы (такие как Test1, Test2, Test3, aso).Structuremap должен регистрировать эти dll (x.Scan (s => s.AddAllTypesOf)), и с помощью простой строки я хочу сказать моему приложению использовать «Test2».
Вот моя идея в форме кода (не работает):
public static class TestHandler
{
static TestHandler()
{
Tests = new Container();
Tests.Configure(x => x.Scan(scanner =>
{
scanner.AssembliesFromPath(@"TestCases");
scanner.AddAllTypesOf<ITest>();
scanner.LookForRegistries();
}));
}
public static Container Tests { get; set; }
public static ITest GetHandler(string handlerName)
{
return Tests.Configure(x => x.For<ITest>().Use(handlerName)))
.GetInstance<ITest>(handlerName);
}
}
Итак, как я могу создать объект, который я могу затем передать .Использовать?И какую переменную мне в любом случае нужно передать?
Если бы мне пришлось угадывать, я бы сказал один из них:
- Полное имя сборки
- Простоимя класса (которое в данном случае было бы Test2)
- AssemblyName.ClassName
Я попробовал метод WhatDoIhave (), который дает мне:
ITest (smTests.ITest) TestExample1.FirstName, TestExample1, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null Настроенный экземпляр TestExample1.FirstName, TestExample1, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = nullИмеет вид: Transient
Исходя из этого, я вполне уверен, что мне нужно использовать TestExample1.FirstName.Но как я могу создать экземпляр в первую очередь?
Спасибо!