ASP.NET WebApi Controllers in the external dll using MEF -
i have simple apicontroller in separate project:
<export("custom", gettype(apicontroller)), partcreationpolicy(creationpolicy.nonshared)> public class customcontroller inherits apicontroller public function getsomething() httpresponsemessage dim result new something() { .code = "code", .somefield = "something", .somefield2 = 5 } return request.createresponse(system.net.httpstatuscode.ok, result) end function end class
after googlinng while i've managed point controller gets resolved using custom implementations of ihttpcontrollerselector , ihttpcontrolleractivator. getting error: "no action found on controller 'custom' matches name 'getsomething'"
. means have implement ihttpactionselector , else afterwards... sounds complicated , illogical, i'm not trying custom handling. hints i'm going wrong?
to have webapi controller in external library appeared extremely simple. need have custom assembliesresolver registered. mef registration loading external dll's already.
trick can can't use defaultassembliesresolver , override function getassemblies(). have implement iassembliesresolver.
here code gave needed:
mef registration (just part extensions loaded):
dim extensionscatalog new directorycatalog(settings.getvalue("extensionsfolder")) dim container new compositioncontainer(extensionscatalog, defaultcatalogep)
global.asax
globalconfiguration.configuration.services.replace(gettype(iassembliesresolver), new models.customassembliesresolver())
customassembliesresolver class
public class customassembliesresolver implements iassembliesresolver public function getassemblies() icollection(of assembly) implements iassembliesresolver.getassemblies dim assemblies list(of assembly) = appdomain.currentdomain.getassemblies().tolist() return assemblies end function end class
and have new controllers "adding automatically" , using mef override/extend base webapis.
Comments
Post a Comment