Я пытаюсь внедрить определенный класс в мой сервис WCF, но он не работает, и я не могу понять, почему. Я ОЧЕНЬ НОВИНКА для MEF и шаблонов, просто пытаюсь заставить его работать. Посмотрел серию видеороликов, чтобы понять, о чем идет речь, но в моем случае начальная загрузка не будет работать, поскольку это не Silverlight
http://channel9.msdn.com/blogs/mtaulty/mef--silverlight-4-beta-part-1-introduction
Вот код Global.asax моего веб-приложения. Это не MVC, просто обычное приложение ASP.NET:
private void Application_Start(object sender, EventArgs e)
{
RegisterRoutes();
var catalog = new WebScopedCatalog(new DirectoryCatalog(Server.MapPath("~\\bin")));
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
ПЕРВЫЙ, я не уверен, что я даже загрузил его правильно. ВТОРОЕ, я использую http://www.timjroberts.com/2011/02/web-scoped-mef-parts/ в качестве руководства для деталей, имеющих веб-область. Мне это нужно, потому что некоторые внедренные объекты должны жить только во время запроса.
Теперь у меня есть следующий класс:
[Export(typeof(ITest))]
[WebPartCreationPolicy(WebCreationPolicy.Session)]
public class Test : ITest
{
public string TestMe()
{
return "Hello!";
}
}
А мой сервис выглядит так:
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MobileService
{
[Import]
public ITest MyTestClass { get; set; }
public MobileService()
{
int i = 10;
}
Когда точка останова достигает i = 10 - у меня есть NULL внутри MyTestClass. Ясно, что MEF не инициализирует этот класс для меня. Я что-то упустил?
EDIT:
Когда я изучаю каталог - я вижу свой класс Exported, но я не вижу его импортированным ...
РЕДАКТИРОВАТЬ 2:
Даниэль, спасибо. Это имеет смысл. На данный момент мне все еще кажется, что это волшебство. Да, WCF создает этот сервис. У меня есть MembershipProvider и различные служебные классы, которые ВСЕ нуждаются в одинаковом импорте. И я не создаю ни один из этих классов, поэтому я не могу позволить, чтобы Меф создал их. (Служба, созданная WCF, MembershipProvider, созданный who-know-what, классы Utility имеют статические методы ...) Я хотел использовать Mef вместо хранения своих вещей в HttpContext.Current. Мой контейнерный объект не имеет SatisfyImports. У этого есть SatisfyImportsOnce. Что если я сделаю это во множестве разных конструкторов? Будет ли Mef использовать один и тот же синглтон или каждый раз будет создавать новый экземпляр?
В этот момент мне интересно, должен ли я вообще использовать Mef в этом конкретном сценарии ..