के लिए सरल इंजेक्टर उपयोग Simpleinjector विकी में निर्देशों के अनुसार इंटरफेस, कमांड और कमांड हैंडलर सेट अप।जेनेरिक कमांड हैंडलर
public interface ICommand
{
string Name { get; set; }
}
public class Command1 : ICommand
{
public string Name { get; set; }
}
public class Command2 : ICommand
{
public string Name { get; set; }
}
public interface ICommandHandler<TCommand>
{
void Execute(TCommand Command);
}
public class Command1Handler : ICommandHandler<Command1>
{
public void Execute(Command1 Command) {
Console.WriteLine(Command.Name);
}
}
public class Command2Handler : ICommandHandler<Command2>
{
public void Execute(Command2 Command) {
Console.WriteLine(Command.Name + "Hello");
}
}
डेकोरेटर:
public class CommandDecorator<TCommand> : ICommandHandler<TCommand>
{
private readonly ICommandHandler<TCommand> _handler;
public CommandDecorator(ICommandHandler<TCommand> handler)
{
this._handler = handler;
}
public void Execute(TCommand command)
{
this._handler.Execute(command);
}
}
नमूना कार्यक्रम
public class Program
{
static void Main(string[] args)
{
Container container = new Container();
//registering
container.RegisterAll<ICommand>(typeof(Command1), typeof(Command2));
container.RegisterManyForOpenGeneric(
typeof(ICommandHandler<>),
typeof(ICommandHandler<>).Assembly);
container.RegisterDecorator(typeof(ICommandHandler<>),
typeof(CommandDecorator<>));
container.Verify();
// sample test command
ICommand testcommand = new Command2();
testcommand.Name = "command 1";
var type = typeof(ICommandHandler<>).MakeGenericType(testcommand.GetType());
dynamic instance = container.GetInstance(type);
instance.Execute((dynamic)testcommand);
}
}
इस सही तरीके से रन टाइम पर आदेश से निपटने के लिए सही हैंडलर प्राप्त करने के लिए है। यह एक नमूना है और वास्तविक ऐप में कमांड कतार में पोस्ट करने जा रहे हैं और एक सेवा कमांड पढ़ने और इसे संसाधित करने जा रही है। मुझे लगता है कि सजावटी के लिए इसका उपयोग किया जाना चाहिए लेकिन मैं इसे काम करने में सक्षम नहीं हूं। यदि कोई हो तो बेहतर विकल्प सुझाएं।