簡體   English   中英

用C#Winforms創建一個Configuration對象的StructureMap

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM