سجل مفردًا ينفذ واجهتين
-
21-12-2019 - |
سؤال
ما هي الطريقة الصحيحة لتكوين كائن في خريطة البنية التي تنفذ واجهتين ولكنها مفردة.
على سبيل المثال الطبقة Main
ينفذ كلا iMainFrmService
و iActiveJobService
.
إليك ما جربته، لكني لست متأكدًا من صحته.
ObjectFactory.Initialize(pExpression=>
{
pExpression.ForSingletonOf<iMainFrmService>().Use<Main>();
pExpression.ForSingletonOf<iActiveJobService>().Use<Main>();
});
المحلول
كما ذكر في الاجابة مرتبط من التعليق أعلاه ، x.Forward< , >()
لا يعطي المفردة لكلا الواجهات.
يرجى التحقق من هذا com.dotnetfiddle لعينة العمل.هنا مقتطف تم نشره هناك:
using System;
using StructureMap;
namespace StructureMapSingleton {
public class Program {
public static void Main(string [] args) {
Bootstrapper.Initialize();
var mainService = Bootstrapper.GetInstance<IMainService>();
mainService.MainMethod();
var secondaryService = Bootstrapper.GetInstance<ISecondaryService>();
secondaryService.SecondMethod();
Console.ReadLine();
}
}
public interface IMainService {
void MainMethod();
}
public interface ISecondaryService {
void SecondMethod();
}
public class MainService : IMainService, ISecondaryService {
private int _invokeCount;
public void MainMethod() {
this._invokeCount++;
Console.WriteLine("In MainService: MainMethod ({0})", this._invokeCount);
}
public void SecondMethod() {
this._invokeCount++;
Console.WriteLine("In MainService: SecondMethod ({0})", this._invokeCount);
}
}
public class Bootstrapper {
private static Container _container;
public static void Initialize() {
_container = new Container(x => {
x.For<IMainService>().Singleton().Use<MainService>();
//x.For<ISecondaryService>().Singleton().Use<MainService>();
x.Forward<IMainService, ISecondaryService>();
});
}
public static T GetInstance<T>() {
return _container.GetInstance<T>();
}
}
}
لا تنتمي إلى StackOverflow