假设我有一个名为 FooController 的类,其中我有一个名为 Bar 的 IBar 类型(接口)的属性。我需要通过 MEF 初始化 Bar。但是,我需要 MEF 在应用程序期间只创建一个 IBar 类型的实例(尽管由于多个请求而多次调用来初始化它)并使其同时可用于所有请求。请注意,可以假定 IBar 实现是线程安全的。
IE
public interface IBar
{
string Method();
}
[Export(typeof(IBar))]
public class MyBar: IBar
{
public string dateTimeCreated;
public MyBar()
{
System.Threading.Thread.Sleep(1000);
dateTimeCreated = DateTime.Now.ToLongTimeString() + " ";
}
public string Method()
{
return dateTimeCreated;
}
}
public class FooController : ApiController
{
[Import(typeof(IBar), RequiredCreationPolicy = CreationPolicy.Shared)]
public IBar Bar { get; set; }
public FooController()
{
//Assume CompositionContainer.ComposeParts call here
}
public string Get()
{
return Bar.Method();
}
}
问题是每次我在 FooController 上调用 Get() 时,返回的时间值都会发生变化。这意味着每次调用都会重新实例化 MyBar 对象。我基本上需要它返回相同的值,这意味着我需要告诉 MEF 在我的应用程序中只创建一个 IBar 实例,尽管有多个请求。
提前致谢。