Разобрался сам ...
В модуле, который использует «внешнюю библиотеку», вы создаете папку Autofac, добавляете класс, который наследуется от модуля Autofac, и добавляете туда свои привязки (это стандартная процедура для настройки привязок в Autofac) - Orchard обнаружите это во время выполнения и введите контроллеры вашего модуля с необходимыми зависимостями.
Однако вызовы во внешнюю библиотеку включены в транзакцию запроса по умолчанию, поскольку именно так работает фруктовый сад. Поскольку моя библиотека вызывала SQL Server через EF4, я получал исключение «MSDTC недоступен». Вам нужно явно указать, что вы не хотите, чтобы эти операции были включены в транзакцию, поэтому ваш контроллер в конечном итоге будет выглядеть так ...
[Themed]
public class HomeController : Controller
{
/* this service is from the external library,
which calls its own database */
private readonly IPackageService _packageSvc;
/* this dependency is injected, based upon the bindings
i specified within the Autofac folder at module level */
public HomeController(IPackageService packageService)
{
_packageSvc = packageService;
}
public ActionResult Index()
{
/* wrap the external lib call so it avoids inclusion
within the orchard request transaction */
using (new TransactionScope(TransactionScopeOption.Suppress))
{
var package = _packageSvc.GetPackage();
var model = new HomePageModel()
{
Package = package
};
return View("ShowPackage", model);
}
}
}