Bạn có thể tăng cường hệ thống mô-đun Prism từ bên trong dịch vụ WCF không? Bởi vì không có vấn đề gì tôi làm phụ thuộc MEF của tôi không được hoàn thành.Hệ thống mô-đun lăng kính từ bên trong dịch vụ WCF?
Ví dụ:
Đây là dịch vụ WCF tôi thực hiện
public class MyService : IMyServiceContract{
// This should get filled by MEF after Prism loads the required modules
[Import]
IDatabase db;
public MyService(){
var bootsrapper = new MyServiceBoostrapper();
bootsrapper.Run();
}
}
Đây là Prism tôi boostrapper với hương vị MEF:
public class MyServiceBoostrapper : MefBootstrapper
{
protected override void ConfigureContainer()
{
base.ConfigureContainer();
}
protected override IModuleCatalog CreateModuleCatalog()
{
return new ConfigurationModuleCatalog();
}
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
// TODO: Add this assembly ... don't know why
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(MyServiceBoostrapper).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(IDatabase).Assembly));
// This is what provides the service
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(DatabaseImpl).Assembly));
}
protected override DependencyObject CreateShell()
{
// we don't need the shell
return null;
}
}
Đây là mô-đun của tôi rằng chứa giao diện cho cơ sở dữ liệu Prism dịch vụ:
[ModuleExport(typeof(IDatabase))]
public class ModuleActivator : IModule
{
public void Initialize()
{
// Do nothing as this module simply provides the API.
}
}
public interface IDatabase
{
// interface methods here ...
}
và cuối cùng ở đây là Prism dịch vụ cơ sở dữ liệu bản thân:
[ModuleExport(typeof(DatabaseImpl), DependsOnModuleNames = new string[] { "IDatabase" })]
public class ModuleActivator : IModule
{
public void Initialize()
{
// Do nothing as this is a library module.
}
}
[Export(typeof(IDatabase))]
public class DatabaseImpl : IDatabase
{
/// implementation here ...
}
Cố gắng này trong vài giờ cuối cùng không thành công. Nhập db
của tôi luôn là null
và không bao giờ được khởi tạo.
Lưu ý rằng mọi thứ hoạt động nếu tôi làm tất cả những điều này không có Prism, nhưng chỉ với MEF.
Vậy còn tiến trình về vấn đề này thì sao? –
Tôi nghĩ rằng tôi đã tìm thấy một giải pháp trong cuốn sách "Dependency Injection in .NET" (Phần 3, Ch. 7.3). Vẫn thử nghiệm nó ra. Về cơ bản nó chỉ là một vấn đề hooking vào thói quen khởi động WCF. – drozzy
Như tôi đã nói trong bình luận của tôi. Tôi thực sự nghĩ rằng vấn đề của nó là Định cấu hình vùng chứa của bạn và xem lại các loại ... –