1

「ルート」ユーティリティ (オブジェクト) を通じて公開したい一連の Factory オブジェクトがあります。このルート ユーティリティは、それ自体が工場です。ユーティリティ オブジェクトとして、静的クラスとして実装したいと考えています。ただし、現在の設計を使用することはできません...インターフェイスに静的メンバーを実装できないためです。

そう...

私の質問は次のとおりです。以下のクラスを変更して、静的ファクトリが上記に影響を与えるようにするにはどうすればよいですか?

コードは次のようになります。

public interface IFactory
{
    I Create<I>();

    IFactoryTransform Transformer { get; }
    IFactoryDataAccess DataAccessor { get; }
    IFactoryValidator Validator { get; }
}

public static class Factory : IFactory
{
    static Factory()
    {

        Transformer = new FactoryTransform();
        DataAccessor = new FactoryDataAccess();
        Validator = new FactoryValidator();
    }

    public I Create<I>()
    {
        var model = typeof(I);

        // Activation code will go here...

        throw new NotSupportedException("Type " + model.FullName + " is not supported.");
    }

    public IFactoryDataAccess DataAccessor { get; private set; }
    public IFactoryTransform Transformer { get; private set; }
    public IFactoryValidator Validator { get; private set; }
}
4

3 に答える 3

4

staticキーワードをFactoryクラスから 1 つ上のレベルに移動できます。たとえばstatic class Utils、単一のプロパティを持つを使用できますMyFactory

public static class Utils
{
    public static IFactory MyFactory {get; private set}
    static Utils()
    {  
        MyFactory = new Factory();
    }
}

//usage
var myInterface = Utils.MyFactory.Create<IMyInterfrace>()

そうは言っても、オブジェクトの有効期間を管理するために、おそらくファクトリと IoC コンテナーの代わりに DI を使用するでしょう。

于 2012-08-05T12:42:15.000 に答える
0

静的クラスがインターフェイスから継承されることはありません。あなたが本当に欲しいのはシングルトンライフサイクルファクトリーだと思います。

于 2012-08-05T12:32:08.470 に答える
0

Microsoft unity と依存性注入を使用しない理由は、静的ファクトリを自分で管理するよりも良い方法です: http://msdn.microsoft.com/en-us/library/ff649614.aspx インスタンス化する unity フレームワークになります皆さん反対します

IUnityContainer myContainer = new UnityContainer();
FactoryDataAccess da= new FactoryDataAccess();
myContainer.RegisterInstance<IFactoryDataAccess >(da);

呼び出すと、 FactoryDataAccess インスタンスが使用されます。

IFactoryDataAccess myServiceInstance = myContainer.Resolve<IFactoryDataAccess >();
于 2012-08-05T12:40:57.933 に答える