[英]StructureMap to create a Configuration object in c# winforms
使用structuremap和c#4.0基本上我是這樣的:
interface IBoard
{
void Setup();
}
class Board : IBoard
{
IConfig _config;
Board(IConfig config)
{
_config = config;
}
void Setup()
{
//use the _config object here
}
}
class Game
{
IBoard _board;
Game(IBoard board)
{
_board = board;
}
}
partial class Form1
{
Form1()
{
InitializeForm();
}
//in here we need to do some work to setup the IConfig object
//via form controls
}
partial class Form2
{
Game _game;
Form1(Game game)
{
InitializeForm();
_game = game;
}
}
現在在正常使用情況下,id只是說
For<Type>().Use<Class>()
或所有我的依賴關系。 但是,我的追求是在form1中設置config對象的值,然后使用在內存中設置並在整個應用程序中維護的config值調用form2的最佳模式是什么? 我想到了使用單例,但是單例應該是不可更改的,或者至少是靜態創建的,並且不接受基於參數的配置...所以該怎么辦? 我目前在Winform程序中通過以下方式創建form1
ObjectFactory.Get<Form1>();
我認為IConfig不適合使用容器進行創建,因為您不知道參數值,除非需要實例化它。 我認為您必須為調用容器的代碼提供配置實例,以獲取表單。
您可以使用With方法為容器提供參數:
ObjectFactory.With<IConfig>(theConfig).GetInstance<Form2>();
您希望最大程度地減少對容器的調用,最好是在應用程序中僅一個位置,該位置在引導過程中將其余部分連接起來。 一種替代方法是注冊一個Func,在引導過程中解決該問題,並使用它創建Form2的實例。
注冊:
var formFactory = config => new Form2(config);
x.For<Func<IConfig, Form2>>().Use( () => formFactory);
用法:
//Get the Func somehow, preferably as a ctor dependency in Form1
var form2Creator = ...
var config = new Config({some parameters from Form1 here});
var form2 = form2Creator(config);
如果您像這樣注冊您的Config
:
For(Of IConfig).Singleton.Use(Of Config)
這將是單例 , StructureMap將負責其余的工作。
另一種方法是:
開始一個工作單元並設置您的價值觀,完成您的工作並處置UoW,但這有點復雜 ,我不知道您是否需要UoW。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.