我有一种情况,其中类的构造函数需要两个实现接口的相同具体类型的实例。这是为了能够使用“任务”并行运行它们以减少时间。
构造函数代码如下:
公共SomeUsingClass(ISomeDependency someDepOne,ISomeDependency someDepTwo) { }在这里,我只有一个实现ISomeDependency的具体类,它是SomeDependencyClass。
当我获得SomeUsingClass的实例时,我必须确保这两个参数指向SomeDependencyClass的单独实例。这是因为,当实例将在两个单独的任务下使用时,它们的“状态”不应该与另一个相冲突。
我尝试使用ISomeDependency的命名实例(将它们命名为“instanceOne”和“instanceTwo”。代码如下所示:
.For<ISomeDependency>().Add<SomeDependency>().Named("instanceOne");
.For<ISomeDependency>().Add<SomeDependency>().Named("instanceTwo");
...然后使用以下内容创建using类的实例:
.For<SomeUsingClass>().Use<SomeUsingClass>()
.Ctor<ISomeDependency>("someDepOne")
.IsNamedInstance("instanceOne")
.Ctor<ISomeDependency>("someDepTwo")
.IsNamedInstance("instanceTwo");
这会导致以下错误:
没有注册默认实例,无法自动确定“ISomeDependency”类型。
我已明确提到使用名称的特定实例。我哪里出错了?
答案 0 :(得分:0)
您只需在注册.For<ISomeDependency>().AlwaysUnique().Add<SomeDependency>().Named("instanceOne");
.For<ISomeDependency>().AlwaysUnique().Add<SomeDependency>().Named("instanceTwo");
时指定:
private static uint PBM_SETSTATE = 0x410;
public enum State { Normal = 1, Error = 2, Warning = 3 };
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam);
public static void SetState(ProgressBar progressBar, int nState)
{
SendMessage(progressBar.Handle, PBM_SETSTATE, (IntPtr)nState, IntPtr.Zero);
}