public interface IResponseService
{
string GetMessage();
}
public class ResponseService : IResponseService
{
public string _ConnectionString {get; private set;}
public ResponseService(string connectionString)
{
this._ConnectionString = connectionString;
}
public string GetMessage()
{
return "Hello";
}
}
Napiszmy teraz BootStraper’a, który poda określonego connectionStringa:
public class DependencyRegistry : Registry
{
public DependencyRegistry()
{
For<IResponseService>().Use<ResponseService>();
}
}
public static class BootStrapper
{
public static void Bootstrap()
{
ObjectFactory.Initialize(x => x.ForRequestedType<IResponseService>().Use<ResponseService>().WithCtorArg("connectionString").EqualTo("localHost:9800"));
}
}
W metodzie WithCtorArg podajemy nazwę parametru z konstruktora klasy ResponseService natomiast w metodzie EqualTo wpisujemy connectionString, który chcemy żeby został podany do kontruktora.
Możemy również podać connectionString, który zapisany jest w pliku app.config. Załóżmy, że napisaliśmy sobie taki oto plik app.config:
Napiszmy teraz BootStraper’a, który pobierze wartość ConnectionString z app.config i poda ją do konstruktora klasy ResponseService:
public static class BootStrapper
{
public static void Bootstrap()
{
ObjectFactory.Initialize(x => x.ForRequestedType<IResponseService>().Use<ResponseService>().WithCtorArg("connectionString").EqualToAppSetting("ConnectionString"));
}
}
Na stronie StructureMap można znaleźć jeden z ciekawszych przykładów zastosowania i działania StructureMap. Aby pokazać istotę tego przykładu dopiszmy do naszych klas nową:
public class MyClass
{
public IResponseService _ResponseSerive { get; private set; }
public MyClass(IResponseService responseService)
{
this._ResponseSerive = responseService;
}
}
Wszystkie inne klasy, które napisaliśmy wcześniej pozostają bez zmian. Teraz spróbujmy wywołać instancję klasy MyClass za pomocą ObjectFactory:
var obj = ObjectFactory.GetInstance<MyClass>();
Oto jak wygląda nasz obiekt obj:
Jak widać z przedstawionego przykładu, wystarczy, że w BootStrapper’e zadeklarujemy że do interfejsu IResposeService jest przyporządkowany obiekt ResponseService i jeśli spróbujemy za pomocą ObjectFactory uzyskać instancję obiektu (w naszym przypadku MyClass), który w konstruktorze jako parametr pobiera obiekt interfejsu IResponseService, StructureMap sam poda odpowiedni obiekt do konstruktora.
0 komentarze:
Prześlij komentarz