8
私はこの問題をかなりの間修正しようとしていますが、私はまだ賢明ではありません。私は、次のメソッドを持っている:Castle Windsor実行時に解決します
public IResult Parse(string[] args)
{
var argumentOption = new ArgumentOption(_dataModelBinder);
var boundArgumentOption = argumentOption.Bind(args);
var bindingResults = boundArgumentOption.Validate(_argumentOptionValidator);
// AREA OF INTEREST
if (bindingResults.Any())
{
return new ErrorResult();
}
return new CreateReportResult(
_resultActioner
, boundArgumentOption.OutputFilePath
, boundArgumentOption.PatientId
, "database");
}
私はとのトラブルを抱えているコードは、私は理想的には私が対処するために城ウィンザーに残したいのですがNEWINGアップ、よ戻り値を必要とします。だから、私はその後、やったことは抽象工場を作成することでした。
public interface IResultFactory
{
IResult Create(int numOfErrors);
}
public class ResultFactory : IResultFactory
{
private readonly IWindsorContainer _container;
public ResultFactory(IWindsorContainer container)
{
_container = container;
}
public IResult Create(int numOfErrors)
{
if (numOfErrors > 0)
{
return _container.Resolve<IResult>("ErrorResult");
}
return _container.Resolve<IResult>("CreateReportResult");
}
}
を、私の解析方法について、次のようになります。
行う方法であると私は問題の多くを抱えている何public IResult Parse(string[] args)
{
var argumentOption = new ArgumentOption(_dataModelBinder);
var boundArgumentOption = argumentOption.Bind(args);
var bindingResults = boundArgumentOption.Validate(_argumentOptionValidator);
IResult result = _factory.Create(bindingResults.Count());
return result;
}
public CreateReportResult(IResultActioner resultActioner, Uri filePath, string patientId, string dataSource)
そこで問題は、私は私のWindsorContainerインストーラで私の登録コードを設定するのですかで、どのように私は、PA:CreateReportResultのコンストラクタがあるため、動的に登録して、パラメータを渡します必要なパラメータにss?私はCastle Windsor 3.2を使用しています。ここで
は、私は私の登録を持っているコードです:
container.Register(
Component
.For<IResult>()
.ImplementedBy<ErrorResult>()
.Named("ErrorResult")
.LifeStyle.Transient
, Component.For<IResultFactory>()
.AsFactory()
);
container.Register(
Component
.For<IResult>()
.ImplementedBy<CreateReportResult>()
.Named("CreateReportResult")
.LifeStyle.Transient
, Component.For<IResultFactory>()
.AsFactory()
);
こんにちはマーティン、私は型付きの工場に出くわしましたが、どのように正しく登録を行うか分からないので、私の目的のためにそれを使用する方法を理解できません。私は私が持っているものを示すために私のOPを更新しました。 – DavidS
型付きのファクトリは、デフォルトでは実装を必要としないということです。 int amountoferrorsパラメータでコンポーネントを解決するには、上のリンクで説明したようにITypedFactoryComponentSelectorを実装する必要があります。メソッドインフォと渡されたパラメータに基づいて、解決したいコンポーネントの名前を返すことができます。実装をインスタンス化するためにさらに多くのパラメータが渡される必要がある場合は、それに応じて変更する必要があります。 (すべてのパラメータは工場に渡す必要があります)。 – Martin
マーティンの説明をありがとう。どのように私がこれについて行ったか興味を持っている人のために、私はこのhttp://davidsiew.wordpress.com/2013/05/08/castle-windsor-typed-factory-resolving-dependencies-at-runtime/についてブログに書いています。 – DavidS